Laravelでpdfを作成できるdompdfのインストール方法と使い方を解説します。
インストール自体はラクですが、面倒なのは日本語フォントを入れる部分。
ひとつずつ手順を解説していきますね。

なお、わたしの環境はWindows。
dompdfの機能はLaravel6と8で確認済みです。
Laravelでpdf作成:dompdfのインストールと日本語化
まずはインストールをした後に、日本語用の設定をしていきましょう。
① dompdfのインストール
下記コマンドでインストールを行います。
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にインストールします。
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ダウンロード用のルートを作成します。
Route::get('/dango', 'DangoController@dango')->name('dango');
Route::get('/pdf', 'DangoController@pdf')->name('pdf');
② コントローラー作成
Dangoコントローラーを作成します。
php artisan make:controller DangoController
app/Http/Controllersの中のDangoControllerを開きます。
一番上に、use PDFを入れておきます。
使いたいモデルもuse宣言に入れておきます。
use PDF; use App\Models\Dango;
表示用のメソッドはこちら。
public function dango(){
return view('dango');
}
ダウンロード用のメソッドはこちら。
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】
<a href="{{ route('pdf') }}">
<button class="btn btn-success">PDF作成</button>
</a>
④ ダウンロード用ファイル作成
次にダウンロード用のファイルを作成します。
resources/viewsの中にdango_pdf.blade.phpファイルを新規作成します。
HTMLを使って内容を入れていきます。
【dango_pdf.blade.php】
<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はインストールにクセがあります!
苦労した部分をすべて書き綴っております。





コメント