我遇到的问题可能是实现问题,但我找不到正确下载的 PDF 和不返回响应数据的 PDF 之间的任何一致性。
我使用的是 Laravel v5.4.36 和 Snappy v0.4.0。
我在前端使用 Angular 5。对 PDF 的任何请求都设置responseType:3 (Blob)。问题不在于 Angular 如何解释数据,而在于生成某些 PDF 时没有返回数据。
以下是我在使用 $pdf->download
时尝试返回的内容或$pdf->stream
:
- PDF HTML 的复杂性没有任何影响。我可以尝试输出一个简单的
<h1>Hello World</h1>
我得到了与输出多页 HTML 相同的结果(什么也没有) - 如果我查看生成的 HTML,一切看起来都很好
- 如果我尝试
save()
PDF 已正确生成,我可以毫无问题地查看它 - 我尝试过同时使用
PDF::loadView('pdfs.reminder', compact('transactions', 'globalData'))
和\View::make('pdfs.reminder', compact('transactions', 'globalData'))
生成 HTML。这没有任何效果。
这是我当前使用的代码:
private function generatePDF($transactions, $globalData)
{
$html = \View::make('pdfs.reminder', compact('transactions', 'globalData'))->render();
$pdf = \PDF::loadHTML($html);
return $pdf->download('reminder.pdf');
}
还值得注意的是,我尝试生成的一些 PDF 已经成功。但到目前为止,这只是 1/3 的成功率。我对所有 3 个都使用相同的请求格式和相同的方法。没有抛出任何错误。
我怀疑可能是生成的 PDF 的大小导致下载失败。但是,我不认为这会成为仅包含 <h1>Hello World</h1>
的 PDF 中的问题。 。文件大小是否有任何限制可能导致此行为?
如有任何帮助,我们将不胜感激。
更新
问题不在于 Snappy,而在于调用 generatePDF
的方法。没有回来generatePDF
的结果。因此,为什么没有返回任何内容。由于那段代码不在我的问题中,因此其他人几乎不可能提供帮助。感谢所有尝试过的人。
最佳答案
例如
$date = Carbon::now()->format('j F, Y');
$application = Application::find($id);
$data = ['date'=>$date,'application'=>$application]; // data to be passes to view file
$pdf = PDF::loadView('pdfs.reminder', $data)->setPaper('a4');
return $pdf->download('reminder.pdf');
注意:在类(class)开始之前,请确保您已使用 PDF 类(class) (use PDF;
)。
关于angular - 无法下载由 barryvdh/laravel-snappy 创建的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48705984/