如何使用Laravel 5.8中的View在浏览器中显示PDF文档

问题描述 投票:0回答:2

我正在使用Laravel 5.8开发Web应用程序,这是Laravel框架的新手。当用户单击某些按钮时,我想在浏览器中显示PDF文档。我将允许经过身份验证的用户“查看”和“下载” PDF文档。

我已经创建了一个Controller和一个Route来显示文档。但是,我很困,因为我有很多文档,而且我不知道如何使用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!');
    }
}

}

/ 路线 /路线:: get('/ preview-pdf / {id}','PDFController @ view');

laravel
2个回答
0
投票

根据laravel docs

文件方法可用于直接在用户的浏览器中显示文件,例如图像或PDF,而不是启动下载。

您需要做的就是将文件路径传递给方法:

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

如果您需要自定义标题:

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

0
投票

Mateus的答案很好地描述了如何设置控制器功能以返回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。这是一个非常简单的PDF查看器JavaScript软件包,可轻松嵌入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的页面相比,它为您的用户提供了更好的UX。希望对您有所帮助!


UPDATE:在阅读完您对其他答案的评论后,我认为您可能会发现this example对于您尝试执行的操作特别有用。

© www.soinside.com 2019 - 2024. All rights reserved.