コトの発端
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が開かれることを確認した。