如何下载 Laravel 中 ajax 调用请求的控制器生成的 PDF

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

我无法直接下载 PDF 文件。

本质上,用户在页面上填写/选择一些输入和选项,然后这些数据通过 Ajax 调用发送到服务器。在服务器端,专用控制器获取此数据并使用它生成 PDF。不需要将 PDF 存储在服务器上或将其显示给用户,我只希望浏览器开始下载 PDF。

我使用 dompdf 库通过 Laravel 生成 PDF 文件。

我应该从控制器返回一种特殊的响应吗?

return response()->json('status' => $status, 'pdf' => $pdf);

以上是我通常响应 Ajax 请求的方式,但我确信还有更多内容:)

$pdf 变量使用

new Dompdf()
进行初始化,进行修改,最后
$dompdf->render()
创建 PDF。

按照 dompdf 文档使用 $pdf->download() 不起作用。

另外,我不知道如何让 JavaScript 在获取响应中的文件后进行下载。可以将文件保存到服务器,然后使用 jQuery 的 Ajax.done() 重定向到下载 URL,但我不想将文件保存在服务器上。

jquery ajax download laravel-8 dompdf
1个回答
0
投票

我的解决方案基于 JavaScript/jQuery 的 this 答案,控制器响应基于 this 答案;

我留下的第一个答案中的 jQuery 代码几乎相同,并且控制器响应也非常相似:

$dompdf->render();
$pdf = $dompdf->output();

return response()->streamDownload(function () use ($pdf) {
    echo $pdf;
}, 'filename', ['Content-Type' => 'application/pdf']);

我只在所需的文件名后添加了

['Content-Type' => 'application/pdf']

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