我无法直接下载 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,但我不想将文件保存在服务器上。
我的解决方案基于 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']
。