はじめに
案件でPDF出力機能の実装が必要となったのでdompdfを導入した
他にもmPDFだったり他候補もあったが導入に苦戦したりとあったので結果dompdf導入となった
他のPDFツール以下を参考に。
https://qol-kk.com/wp2/blog/2022/08/09/post-3180/
導入手順
①dompdfをインストール
composer require barryvdh/laravel-dompdf
コマンドを実行
そうするとcomposer.jsonのrequireにdompdfが追加される。
"require": {
"php": "^8.1.13",
"barryvdh/laravel-dompdf": "^2.0",
②Controller作成
php artisan make:controller DompdfController
<?php
namespace App\Http\Controllers;
use Barryvdh\DomPDF\Facade\Pdf; // 追記
class DompdfController extends Controller
{
public function generatePDF()
{
$pdf = PDF::loadView('dompdf.pdf');
return $pdf->download('PDFダウンロード.pdf');
}
}
③Viewを作成する
PDFで出力するファイルを作成しておきましょう。
resources/views 配下にdompdfディレクトリを追加し、そこにpdf.blade.phpを作成しましょう。
中身はプロジェクトによって異なるため、基本的な実装のみ記述します。
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>PDF出力</title>
</head>
<style>
</style>
<body>
ここに中身を記述する
</body>
</html>
④日本語フォントを導入する
dompdf
を導入するだけだと日本語に対応していないため、日本語フォントを導入する必要があります。
いくつか日本語フォントは存在するため何でも大丈夫ですが、今回はIPAフォントを導入します。
https://moji.or.jp/ipafont/ipaex00401/
fontsディレクトリを作成し、フォントファイルを格納する
storage
配下にfonts
ディレクトリを追加し、ダウンロードしたttfファイルを格納します。
storage/fonts/ipaexg.ttf
bladeファイルに必要事項を記述し、日本語フォントを適用させる
ただファイルを格納するだけでは有効にすることができません。
bladeファイルに必要なことを記述し、適用させましょう。
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>PDF出力</title>
</head>
<style>
/* dompdf日本語文字化け対策 */
/* 基本の文字 */
@font-face {
font-family: ipaexg;
font-style: normal;
font-weight: normal;
src: url('{{ storage_path('fonts/ipaexg.ttf') }}');
}
/* 全てのHTML要素に適用 */
html, body, textarea {
font-family: ipaexg, sans-serif;
}
</style>
<body>
ここに中身を記述する
</body>
</html>
⑤ルートを記載する
最後にアクセスするためのルートを記載します。
api.php
でもいいですが、今回はweb.php
に書いていきます。
use App\Http\Controllers\DompdfController;
Route::get('dompdf/pdf', [DompdfController::class, 'generatePDF']);
これで、http://localhost:8080/dompdf/pdf
へアクセスするとPDFが出力されるはずです。
以上。
参考
https://github.com/barryvdh/laravel-dompdf
https://itcrest.co.jp/laravel-dompdf/