PHP

Laravel-pdfでめっちゃ簡単にPDFが出力できた話

コトの発端

LaravelでPDFを出力する必要が出てきたので調査したら、日本語の情報がほぼなくて調査が難航した。

AIのLlama3に聞いたらいい感じの回答が得られたので実践してみたら、エラーには遭遇したものの結果的に簡単に出力できることが分かったので記録。

方法

laravel-pdfをプロジェクトにインストール

composer require spatie/laravel-pdf

puppeteerも必要そうなのでインストール。

npm install puppeteer

まずはPDFにしたいビューを作成

<!DOCTYPE html>
<html>
<head>
    <title>PDF Template</title>
</head>
<body>
    <h1>PDF</h1>
    <p>{{ $data->message??null }}</p>
</body>
</html>

コントローラを作成

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

use Spatie\LaravelPdf\Facades\Pdf;

class SandboxController extends Controller
{

    public function pdftest(){
        $data = Pdf::view('pdf.template', [])
            ->format('a4')
            ->name('your-invoice.pdf');
        return $data;
    }
}

適当にルートを設定しアクセスしたらOK。

//laravel-pdfの実験
Route::get(
    '/pdftest', 
    [App\Http\Controllers\SandboxController::class, 'pdftest']
)->name('pdftest');

エラーが出る場合

私の場合、アクセスしたときに下記のエラーが発生した。

Symfony\Component\Process\Exception\ProcessFailedException

調査したところ、laravel-pdfのバグ(?)のようだったが、下記のページにて解決方法が投稿されていたので実施。

https://github.com/spatie/laravel-pdf/issues/70

修正内容

vendor\spatie\browsershot\src\Browsershot.php 1032行目の

new Process($fullCommand)

new Process($fullCommand,null,getenv())

に修正することでこのエラーは解決された。

エラー修正後にアクセスしたところPDFが開かれることを確認した。

  • この記事を書いた人
あっきー

あっきー

とある企業の研究者。研究分野以外に手を出しすぎて毎日が慌ただしい。 研究者の肩書きが正しいかどうかは万年の謎。 得意ジャンルはデータベースとセキュリティーですが、AIやIoT、アプリ開発など、手広く活動しています。

-PHP
-, ,

Translate »