php - Laravel 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 并且一切正常,除了它无法渲染图表,所以我现在正在尝试设置 snappy。
解决方案
就我而言,问题是我传递null
给. 在引擎盖下,它检查是否并创建一个临时文件以进一步生成 PDF。如果临时文件不存在,则会引发问题中所述的错误。$html
Knp\Snappy\Pdf::getOutputFromHtml($html)
$html !== null
wkhtmltopdf
推荐阅读
- laravel - Laravel 根据时间戳更新数据库字段
- c - 矩阵乘法不适用于 C 中大于外部的内部维度
- android - 如何增加 FD_SETSIZE 或限制 Android Emulator 引发的描述符数量
- node.js - Docker Nodejs - 将应用程序文件夹映射到主机文件夹 - 应用程序无法启动,找不到模块
- c# - 在 C# 中计算下一个可接受的通知时间
- reactjs - 前一个函数完成后调用一个函数reactjs
- python - 我可以在不使用try语句的情况下捕获python中的异常信息吗?
- coding-style - 我的解决方案有什么问题?帮我改进它或任何其他解决方案?
- tvos - TVOS:在 tvOS 应用程序上显示警报的问题
- java - 静态方法不能在非静态上下文中运行