【问题标题】:Unable to download PDF created by barryvdh/laravel-snappy无法下载由 barryvdh/laravel-snappy 创建的 PDF
【发布时间】: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


【解决方案1】:

例如

$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');

注意:请确保您在课程开始前已使用 PDF 课程 (use PDF;)。

【讨论】:

  • @NikolaGavric 那么你应该投票给答案以表示鼓励。
  • 同意@SapneshNaik,因为它可以帮助其他人快速找到解决方案,谢谢。
  • 嗨@PrashantPrajapati,谢谢您的回答。我试过你的建议,但没有任何影响。具体来说,我停止使用compact(),只是手动创建了一个数组,还使用了PDF::loadView(),而不是使用View::make()(我已经尝试在两者之间切换,但没有任何区别)。班级顶部还有use PDF;,这就是你的笔记的意思吗?
【解决方案2】:

第一行有<!DOCTYPE html>吗?

private function generatePDF($transactions, $globalData){
    $html = \View::make('pdfs.reminder')->render();
    $pdf = \PDF::loadHTML($html);

    return $pdf->stream();
}

pdfs.reminder.blade.php

<!DOCTYPE html>
<h1>Hello World</h1>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 2023-04-09
    • 2016-04-02
    • 1970-01-01
    • 2019-04-04
    • 2019-07-19
    • 2019-11-12
    • 2019-03-08
    相关资源
    最近更新 更多