无法下载由barryvdh / laravel-snappy创建的PDF

时间:2018-02-09 12:35:29

标签: angular laravel laravel-5 pdf-generation wkhtmltopdf

我遇到的问题可能是实施,但我无法找到正确下载的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的结果。因此,为什么没有返回。由于那段代码不在我的问题中,所以其他人几乎不可能提供帮助。感谢所有尝试过的人。

2 个答案:

答案 0 :(得分:2)

E.g

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

答案 1 :(得分:0)

你在第一行有<!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>