没有创建Laravel snappy文件

时间:2018-10-03 10:51:26

标签: php laravel wkhtmltopdf laravel-snappy knp-snappy

我正在尝试使用Laravel snappy创建pdf。

问题是当我尝试在控制台中运行wkhtmltopdf命令时,例如:

wkhtmltopdf http://google.com google.pdf

它工作正常并生成pdf。

但是当我尝试在控制器中生成pdf时,它将引发此异常:

  

RuntimeException
  文件   '/ home / alemil / Projects / test / storage / app / annual_reports / Pdf test.pdf'未创建   (命令:/ usr / local / bin / wkhtmltopdf --lowquality --orientation   'landscape'--page-size'a3'   '/tmp/knp_snappy5bb49cd6bfcf14.16728595.html'   “ / home / alemil / Projects / test / storage / app / annual_reports / Pdf test.pdf”)。

我试图复制上面的命令并直接在控制台中执行。这就是我得到的:

  

正在加载页面(1/6)   错误:无法加载http://tmp/knp_snappy5bb49cd6bfcf14.16728595.html,网络状态码为3,http状态码为0-找不到主机tmp   错误:加载页面http:///tmp/knp_snappy5bb49cd6bfcf14.16728595.html失败(有时,仅使用--load-error-handling ignore可以忽略此错误)   由于网络错误,退出代码1:HostNotFoundError

如我所见,它尝试获取本地文件,因为它是远程文件。我找不到这个问题,所以我问有人可以解决这个问题还是有什么想法。

我的环境是Ubuntu 18.04 PHP和PHP 7.2.10。

这是我的代码:

    // app.php aliases
   'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,    

    // controller code
    PDF::loadView('admin.reports.annual.pdf_template', $data)
        ->setPaper('a3', 'landscape')
        ->save(
            storage_path('app/annual_reports/') . $report->pdf, 
            true // when there is file with same name it throws file already exists so I had to set owerwrite to true
        );

还有一点要指出,我使用的是barryvdh / laravel-dompdf,除了无法绘制图表外,其他一切工作正常,所以我现在尝试设置快照。

2 个答案:

答案 0 :(得分:1)

在我的情况下,问题是我将null中的$html传递给了Knp\Snappy\Pdf::getOutputFromHtml($html)Under the hood会检查是否$html !== null,并创建一个临时文件以进一步生成PDF。如果临时文件不存在,wkhtmltopdf会引发如所描述的错误。

答案 1 :(得分:0)

我认为(不确定)您的应用程序中存在一个阻止您的控制器访问链接的阻止。或在创建PDF时。

它也可以是您的代码语法。

您可以尝试html

$pdf = new Pdf('/usr/local/bin/wkhtmltopdf');
$pdf->generateFromHtml('<h1>test</h1><p>test from test</p>', '/tmp/test-123.pdf');