LoginSignup
2
3

Laravel snappyでちょっとハマったメモ

Last updated at Posted at 2021-12-23

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".というエラーが発生しました
このエラーがググってもまぁ解決策が何もわからない

image.png

原因

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>
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3