Как отображать PDF документы в браузере с помощью View в Laravel 5.8 - PullRequest
0 голосов
/ 27 сентября 2019

Я работаю над веб-приложением, использующим Laravel 5.8, я новичок в фреймворке Laravel.Я хотел бы отображать PDF-документы в браузере, когда пользователи нажимают на некоторые кнопки.Я разрешу аутентифицированным пользователям «просматривать» и «загружать» документы PDF.

Я создал контроллер и маршрут для отображения документов.Однако я застрял, потому что у меня много документов, и я не знаю, как использовать Laravel VIEW для отображения и загрузки каждого документа по отдельности.

/ * PDFController * /

public function view($id)
{
    $file = storage_path('app/pdfs/') . $id . '.pdf';

    if (file_exists($file)) {

        $headers = [
            'Content-Type' => 'application/pdf'
        ];

        return response()->download($file, 'Test File', $headers, 'inline');
    } else {
        abort(404, 'File not found!');
    }
}

}

/ Маршрут / Route :: get ('/ preview-pdf / {id}', 'PDFController @ view');

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Ответ Матеуса хорошо описывает, как настроить функцию контроллера для возврата файла PDF.Я хотел бы сделать что-то подобное в вашем /routes/web.php файле:

Route::get('/show-pdf/{id}', function($id) {
    $file = YourFileModel::find($id);
    return response()->file(storage_path($file->path));
})->name('show-pdf');

Другая часть вашего вопроса - как встроить PDF в ваш *.blade.php шаблон представления.Для этого я рекомендую использовать PDFObject .Это очень простой пакет JavaScript для просмотра PDF, который облегчает встраивание PDF.

Если вы используете npm, вы можете запустить npm install pdfobject -S для установки этого пакета.В противном случае вы можете обслужить его с CDN или разместить скрипт самостоятельно.После включения сценария вы настраиваете его следующим образом:

HTML :

<div id="pdf-viewer"></div>

JS :

<script>
PDFObject.embed("{{ route('show-pdf', ['id' => 1]) }}", "#pdf-viewer");
</script>

И все - супер просто!И, на мой взгляд, он обеспечивает более приятный пользовательский интерфейс для пользователей, чем переход на страницу, на которой показан сам PDF.Я надеюсь, что вы найдете это полезным!


ОБНОВЛЕНИЕ: Прочитав ваши комментарии к другому ответу, я подумал, что вы могли бы найти этот пример особенно полезным для чегоВы пытаетесь сделать.

0 голосов
/ 27 сентября 2019

Согласно laravel docs :

Метод файла может использоваться для отображения файла, такого как изображение или PDF, непосредственно в браузере пользователя вместо инициациискачать.

Все, что вам нужно сделать, это передать путь к файлу методу:

return response()->file($pathToFile);

Если вам нужны пользовательские заголовки:

return response()->file($pathToFile, $headers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...