Lravel で、PDF出力する方法は色々あります。
人気のあるプラグインもたくさんあり、どれを採用してよいのか迷ってしまうと思います。
本記事では、PDF出力でもっとも人気のあるプラグインである「Laravel-dompdf」の利用方法を解説いたします。
ぜひ、参考にしていただければと思います。
インストール
下記のコマンドを実行して、インストールを実行します。
1 |
$ composer require barryvdh/laravel-dompdf |
Laravel 5.5以上であれば、config/app.phpへの設定作業も必要ありません。
インストール履歴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
Info from https://repo.packagist.org: #StandWithUkraine ./composer.json has been updated Running composer update barryvdh/laravel-dompdf Loading composer repositories with package information Updating dependencies Lock file operations: 5 installs, 0 updates, 0 removals - Locking barryvdh/laravel-dompdf (v2.0.1) - Locking dompdf/dompdf (v2.0.3) - Locking phenx/php-font-lib (0.5.4) - Locking phenx/php-svg-lib (0.5.0) - Locking sabberworm/php-css-parser (8.4.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 5 installs, 0 updates, 0 removals - Downloading sabberworm/php-css-parser (8.4.0) - Downloading phenx/php-svg-lib (0.5.0) - Downloading phenx/php-font-lib (0.5.4) - Downloading dompdf/dompdf (v2.0.3) - Downloading barryvdh/laravel-dompdf (v2.0.1) - Installing sabberworm/php-css-parser (8.4.0): Extracting archive - Installing phenx/php-svg-lib (0.5.0): Extracting archive - Installing phenx/php-font-lib (0.5.4): Extracting archive - Installing dompdf/dompdf (v2.0.3): Extracting archive - Installing barryvdh/laravel-dompdf (v2.0.1): Extracting archive 1 package suggestions were added by new dependencies, use `composer suggest` to see details. Package fabpot/goutte is abandoned, you should avoid using it. Use symfony/browser-kit instead. Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi INFO Discovering packages. barryvdh/laravel-dompdf .................................................................................................. DONE inertiajs/inertia-laravel ................................................................................................ DONE kyslik/column-sortable ................................................................................................... DONE laravel/sail ............................................................................................................. DONE laravel/sanctum .......................................................................................................... DONE laravel/tinker ........................................................................................................... DONE maatwebsite/excel ........................................................................................................ DONE nesbot/carbon ............................................................................................................ DONE nunomaduro/collision ..................................................................................................... DONE nunomaduro/termwind ...................................................................................................... DONE spatie/laravel-ignition .................................................................................................. DONE tightenco/ziggy .......................................................................................................... DONE 90 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan vendor:publish --tag=laravel-assets --ansi --force INFO No publishable resources for tag [laravel-assets]. Found 1 security vulnerability advisory affecting 1 package. Run composer audit for a full list of advisories. Using version ^2.0 for barryvdh/laravel-dompdf |
フォント準備
laravel-dompdfでは、日本語を出力するには、日本語フォントが必要になります。
下記のリンクから、IPAフォントをダウンロードしてstorage/fontsに設置します。
(フォルダが無い場合には、作成して権限を777に設定します)
MigMix(ミグミックス)フォント
https://mix-mplus-ipa.osdn.jp/migmix/
Viewの作成
ここでは、PDFでアウトプットされるViewを作成します。
/resources/views/pdf.blade.php
注意点としては、@font-faceの部分です。
ここに指定したフォントが PDFで利用できるようになります。
なお、@font-faceが2つあるのは通常の文字と、太字に対応するためです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<!DOCTYPE html> <html> <title>pdf test</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <style> @font-face { font-family: migmix-1p-regular; font-style: normal; font-weight: normal; src: url('{{ storage_path('fonts/migmix-1p-regular.ttf') }}'); } @font-face{ font-family: migmix-1p-bold; font-style: bold; font-weight: bold; src:url('{{ storage_path('fonts/migmix-1p-bold.ttf')}}'); } body { font-family: migmix-1p-regular; } h1, h2 { font-family: migmix-1p-bold; } </style> <body> <h1>テストページ</h1> <h2> 日付 : {{ $date }} <br> </h2> <p> こんにちは {{ $name }} さん! </p> </body> </html> |
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/app/Http/Controllers/DemoController.php class DemoController extends Controller { public function pdf() { $pdf = \Pdf::loadView('demo.pdf', [ "date" => date("Y年m月d日"), "name" => "小林花子", ]); return $pdf->stream("title.pdf"); } // 省略 } |
先ほど作成したビューを、loadView()で読み込んで、stream()を呼びます。
また、PDFをダウンロードしたい場合は、下記のように、return部分を変更します。
return $pdf->download('title.pdf');
実行結果
PDF出力結果は、下記の画像のように出力されます。
その他の補足
テーブルのテキスト文字の折り返し<\h3>
DomPDFで word-wrap、word-break が効かない場合があります。
サイトには色々な方法が記載されていましたが、どれもうまくいきませんでした。
一番かんたんな方法は、下記のように記述することで解決できます。
1 |
<table style="table-layout: fixed"> |
用紙指定の方法
1 2 3 |
$pdf = \Pdf::loadView('label.export', compact('data')) ->setPaper('a5') ->setWarnings(false); |
縦・横への変更
1 2 3 |
$pdf = \Pdf::loadView('label.export', compact('data')) ->setPaper('a5', 'landscape') ->setWarnings(false); |
参考サイト
Laravel-dompdfでPDF化する方法について
https://itcrest.co.jp/laravel-dompdf/
Docker + laravel-dompdfで日本語が文字化けする
https://qiita.com/Kim-yzrh/items/2c319080755e56a1be0f
LaravelでPDF出力したいけど結局何がベストなのか
https://qol-kk.com/wp2/blog/2022/08/09/post-3180/#outline__1
LaravelでPDFを出力する
https://qiita.com/yukieeeee/items/2085aad47f73aae3889e
【Laravel】laravel-dompdfライブラリでPDFを出力するやり方を解説します
https://www.tairaengineer-note.com/laravel-output-pdf/
Laravel環境下でPDFを出力する際の注意点(DomPdf)
https://qiita.com/kanryu/items/ca3beb647b1c4af22aef