【问题标题】:How to display PDF Documents on the browser using a View in Laravel 5.8如何使用 Laravel 5.8 中的视图在浏览器上显示 PDF 文档
【发布时间】:2020-01-28 00:23:12
【问题描述】:

我正在使用 Laravel 5.8 开发一个 Web 应用程序,我是 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');

【问题讨论】:

  • 您想将文件嵌入到刀片视图中吗?
  • 您是想自己实现,还是愿意接受利用现有软件包的答案?
  • @Mateus - 我在 storage/app/pdfs 目录中有 PDF 文件。我希望用户查看和下载这些文档。我对如何使用刀片和属性路由使其正常工作感到困惑。
  • 你的文件路径是否存储在数据库或类似的东西中?
  • @Vince - 如果您知道任何可以解决此问题的软件包,您可以分享。谢谢。

标签: laravel


【解决方案1】:

根据laravel docs

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

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

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

如果您需要自定义标题:

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

【讨论】:

  • 谢谢,我已经有了这段代码,但挑战是如何在我的 PDFController 中使用代码并创建一个刀片视图,该视图将在浏览器上显示不同的 PDF 文档(无需用户离开仪表板) 这些不同的文档将在用户单击按钮时显示。例如,如果用户单击名为“Test PDF”的按钮,他们将能够在浏览器上查看文档。
  • 您可以使用$files = Storage::allFiles($directory); 列出某个目录中的所有文件。也许有帮助
  • @Amos 查看我的回答,了解如何在刀片视图中显示 PDF 的建议
【解决方案2】:

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 的页面。希望对您有所帮助!


更新: 在阅读了有关其他答案的 cmets 之后,我想您可能会发现 this example 对于您正在尝试做的事情特别有用。

【讨论】:

  • 感谢 Vince 和 Mateus 的帮助,让我来完成这项工作,感谢您的帮助。
  • 很高兴我能帮上忙! ??
  • @Vince - 要使用此代码意味着我必须创建一个模型,并且我的 PDF 将从数据库中获取?
  • 完全没有——只是我的一个假设。
  • @Amos,如果此答案解决了您的问题,请点赞,并将其标记为“已接受”(复选标记),以便将来对其他人有所帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多