【发布时间】:2018-07-20 05:35:26
【问题描述】:
我遇到的问题可能是实施,但我找不到正确下载的 PDF 和不返回响应数据的 PDF 之间的任何一致性。
我正在使用 Snappy 的 Laravel v5.4.36 和 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 的结果。因此,为什么什么都没有返回。由于那段代码不在我的问题中,因此其他人几乎不可能提供帮助。感谢所有尝试过的人。
【问题讨论】:
-
->stream('reminder.pdf')返回什么? -
您正在使用作为 $html 传递给 PDF 的刀片文件上的渲染。您应该在 PDF 实例上使用渲染。
标签: angular laravel laravel-5 pdf-generation wkhtmltopdf