Laravel snappy を使用してPDF出力をしていたところ
The process has been signaled with signal "11".
というエラーに悩まされたので備忘録です
barryvdh/laravel-dompdf を使用した場合でも
表示に凄く時間がかかる原因の一つであることも確認しました
環境
WSL2 Ubuntu 20.04.3
docker 4.2.0 で centos 8 を起動
php:8.0.10
Laravel:8.57.0
エラーが起きたコード
まずはエラーが起きたコードを簡単に再現します
pdf_image.blade.php
<html>
<head>
<link rel="stylesheet" href="{{ asset('/common/css/pdf_image.css') }}">
</head>
<body>
<div class="text">
<p>画像を表示します</p>
</div>
<div class="image">
<img src="{{ asset('/common/images/photo.jpg') }}">
</div>
</body>
</html>
pdfController.php
use Barryvdh\Snappy\Facades\SnappyPdf as PDF;
class pdfController extends Controller
{
public function download()
{
$html = view('pdf_image')->render();
$pdf = PDF::loadHTML($html)->setOption('encoding', 'utf-8');
return $pdf->download('image_view.pdf');
}
}
上記コード実行したところ The process has been signaled with signal "11".
というエラーが発生しました
このエラーがググってもまぁ解決策が何もわからない
原因
CSSや画像の表示に asset()
を使用していたことが原因でした
asset()
から public_path()
に書き換えることでエラー解消しPDFダウンロードができるようになりました
PDFダウンロードの前にブラウザ上でプレビュー画面を用意してましたが
プレビューではpublic_path()
で表示ができず asset()
で表示できていたので
そのまま行けるだろうと思ってた為にハマってました
pdf_image.blade.php
<html>
<head>
// asset から public_path に変更
<link rel="stylesheet" href="{{ public_path('/common/css/pdf_image.css') }}">
</head>
<body>
<div class="text">
<p>画像を表示します</p>
</div>
<div class="image">
// asset から public_path に変更
<img src="{{ public_path('/common/images/photo.jpg') }}">
</div>
</body>
</html>