Laravel 没有创建活泼的文件
Laravel snappy file was not created
我正在尝试使用 Laravel snappy 创建 pdf。
问题是当我尝试在控制台中使用 运行 wkhtmltopdf 命令时,例如:
wkhtmltopdf http://google.com google.pdf
它工作正常并生成 pdf。
但是当我尝试在我的控制器中生成 pdf 时,它抛出了这个异常:
RuntimeException
The file
'/home/alemil/Projects/test/storage/app/annual_reports/Pdf test.pdf' was not created
(command: /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').
我试过复制上面的命令直接在控制台执行。这就是我得到的:
Loading pages (1/6)
Error: Failed to load http://tmp/knp_snappy5bb49cd6bfcf14.16728595.html, with network status code 3 and http status code 0 - Host tmp not found
Error: Failed loading page http:///tmp/knp_snappy5bb49cd6bfcf14.16728595.html (sometimes it will work just to ignore this error with --load-error-handling ignore)
Exit with code 1 due to network error: HostNotFoundError
如我所见,它尝试获取远程的本地文件。我找不到这个问题,所以我想问问是否有人可以解决这个问题或有任何想法。
我的环境是Ubuntu18.04PHP和PHP7.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。
嗯
我认为(不确定)您的应用程序中存在阻止您的控制器访问 link 的阻塞。或者在创建 PDF 时。
也可以是你的代码语法。
你可以为 html 试试这个:
$pdf = new Pdf('/usr/local/bin/wkhtmltopdf');
$pdf->generateFromHtml('<h1>test</h1><p>test from test</p>', '/tmp/test-123.pdf');
在我的例子中,问题是我将 $html
中的 null
传递给了 Knp\Snappy\Pdf::getOutputFromHtml($html)
。 Under the hood 它检查 $html !== null
并创建一个临时文件以进一步生成 PDF。如果临时文件不存在 wkhtmltopdf
会抛出问题中描述的错误。
我正在尝试使用 Laravel snappy 创建 pdf。
问题是当我尝试在控制台中使用 运行 wkhtmltopdf 命令时,例如:
wkhtmltopdf http://google.com google.pdf
它工作正常并生成 pdf。
但是当我尝试在我的控制器中生成 pdf 时,它抛出了这个异常:
RuntimeException
The file '/home/alemil/Projects/test/storage/app/annual_reports/Pdf test.pdf' was not created (command: /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').
我试过复制上面的命令直接在控制台执行。这就是我得到的:
Loading pages (1/6) Error: Failed to load http://tmp/knp_snappy5bb49cd6bfcf14.16728595.html, with network status code 3 and http status code 0 - Host tmp not found Error: Failed loading page http:///tmp/knp_snappy5bb49cd6bfcf14.16728595.html (sometimes it will work just to ignore this error with --load-error-handling ignore) Exit with code 1 due to network error: HostNotFoundError
如我所见,它尝试获取远程的本地文件。我找不到这个问题,所以我想问问是否有人可以解决这个问题或有任何想法。
我的环境是Ubuntu18.04PHP和PHP7.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。
嗯
我认为(不确定)您的应用程序中存在阻止您的控制器访问 link 的阻塞。或者在创建 PDF 时。
也可以是你的代码语法。
你可以为 html 试试这个:
$pdf = new Pdf('/usr/local/bin/wkhtmltopdf');
$pdf->generateFromHtml('<h1>test</h1><p>test from test</p>', '/tmp/test-123.pdf');
在我的例子中,问题是我将 $html
中的 null
传递给了 Knp\Snappy\Pdf::getOutputFromHtml($html)
。 Under the hood 它检查 $html !== null
并创建一个临时文件以进一步生成 PDF。如果临时文件不存在 wkhtmltopdf
会抛出问题中描述的错误。