Laravelでpdfを作成できるdompdfのインストール方法と使い方を解説します。
インストール自体はラクですが、面倒なのは日本語フォントを入れる部分。
ひとつずつ手順を解説していきますね。
なお、わたしの環境はWindows。
dompdfの機能はLaravel6と8で確認済みです。
Laravelでpdf作成:dompdfのインストールと日本語化
まずはインストールをした後に、日本語用の設定をしていきましょう。
① dompdfのインストール
下記コマンドでインストールを行います。
1 |
composer require barryvdh/laravel-dompdf |
② load_font.phpダウンロード
次に日本語化の準備です。
下記より、ファイルを一式ダウンロードして解凍します。
この中の load_font.phpファイルをプロジェクトフォルダの直下にいれてください。
他のファイルは、プロジェクトフォルダ内に【temp】フォルダを作り、その中にいれておきます。
③ 日本語フォントダウンロード
次に日本語フォントのダウンロードです。
お好きなものでOKですが、今回はIPAexフォントを下記よりダウンロードさせてもらいます。
ページ下の【IPAサイトからダウンロード】より、お好きな書体を選んでダウンロード・解凍してください。
解凍したフォルダの中には、ipaexm.ttf フォントファイルが入っています。
このファイルを、②で作成したtempフォルダの中にいれておきます。
④ load_font.phpの実行
load_font.phpを実行し、③のフォントをdompdfにインストールします。
1 |
php load_font.php ipaexm temp/ipaexm.ttf |
さらに、【プロジェクトフォルダ/vendor/dompdf/dompdf/lib/fonts】の中の次の3つのファイルをコピーしてください。
- ipaexm.ttf
- ipaexm.ufm
- dompdf_font_family_cache.php
【プロジェクトフォルダ/storage】の中にfontsフォルダを作り、この3つのファイルを貼り付けます。
これで日本語ファイル設定OKです。
Laravelでpdf作成:dompdfを使ってPDFダウンロード機能設置
準備が完了したので、ここからはPDFをダウンロードできる機能を設置してみましょう。
次のようなボタンを作成します。
ボタンを押すと、データベーステーブルの内容が組み込まれたPDFファイルがダウンロードできます。
① ルート設定
まずはroutes/web.phpファイルに、表示用とPDFダウンロード用のルートを作成します。
1 2 |
Route::get('/dango', 'DangoController@dango')->name('dango'); Route::get('/pdf', 'DangoController@pdf')->name('pdf'); |
② コントローラー作成
Dangoコントローラーを作成します。
1 |
php artisan make:controller DangoController |
app/Http/Controllersの中のDangoControllerを開きます。
一番上に、use PDFを入れておきます。
使いたいモデルもuse宣言に入れておきます。
1 2 |
use PDF; use App\Models\Dango; |
表示用のメソッドはこちら。
1 2 3 |
public function dango(){ return view('dango'); } |
ダウンロード用のメソッドはこちら。
1 2 3 4 5 |
public function pdf(){ $dangos=Dango::all(); $pdf=PDF::loadView('dango_pdf', compact('dangos')); return $pdf->download('dangofile.pdf'); } |
今回はdangosテーブルの内容を使います。
$dangosにテーブルの中身を代入して、これをcompact関数を使ってビューファイルに受け渡します。
使いたいテーブルによって、モデル名などは変えてくださいね。
③ 表示用ビューファイル作成
次はビューファイルの作成です。
resources/viewsのなかに dango.blade.phpファイルを作成します。
次のようにPDFダウンロード用のボタンを設置します。
【dango.blade.php】
1 2 3 |
<a href="{{ route('pdf') }}"> <button class="btn btn-success">PDF作成</button> </a> |
④ ダウンロード用ファイル作成
次にダウンロード用のファイルを作成します。
resources/viewsの中にdango_pdf.blade.phpファイルを新規作成します。
HTMLを使って内容を入れていきます。
【dango_pdf.blade.php】
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>お団子プロジェクト</title> <style> body { font-family: ipaexm; } </style> </head> <body> お団子プロジェクト @foreach($dangos as $dango) {{$dango->dango}} @endforeach </body> |
ポイントは、<style></style>の中でフォント名を設定しておくこと。
これがないと、日本語のファイルを表示できません。
⑤ テスト
それでは実際に表示してみます。
サーバーを立ち上げ、 http://127.0.0.1:8000/dango を表示します。
ボタンが表示されました。
ボタンをクリックすると、次のようなPDFをダウンロードできます。
ということで、無事表示成功!
もし「Undefined Index」というエラーがでたら
プロジェクトフォルダ/storage/fontsの中にコピーした下記ファイルを削除してみてください。
- dompdf_font_family_cache.php
ハッキリ分かりませんが、Laravelのバージョンによって、エラーになるようです。
上記ファイルを消すと、dompdfを使ったときに、storage/fonts フォルダの中にcacheファイルが生成されます。
さいごに
ただ「dompdfだと必要な機能がない」と感じたら、snappy pdfというパッケージもおすすめ。
dompdfとsnappy pdfの比較はこちら。
snappy pdfのインストールなどはこちら。
snappy pdfはインストールにクセがあります!
苦労した部分をすべて書き綴っております。