我正在尝试使用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,除了无法绘制图表外,其他一切工作正常,所以我现在尝试设置快照。
答案 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');