Quantcast
Channel: laravel5.8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 87

Laravel5.8環境で日本語PDF出力(Laravel-dompdf)

$
0
0

Laravel5.8環境で日本語PDF出力(Laravel-dompdf)

laravel-dompdfパッケージのインストール

composer.jsonファイルに
"barryvdh/laravel-dompdf": "^0.8.5", を追加して
プロジェクトディレクトリ(/home/public_html)に移動し下記コマンドを実行する。
1. composer updateを実行
2. composer require barryvdh/laravel-dompdf

PDF出力(Route設定)

Route::get('/payslip', 'Payslip\PayslipController@index');
Route::group(['middleware' => 'auth.check.user'], function () {
  Route::get('/payslip/pdf', [ 'as' => 'payslip.pdf', 'uses' => 'Payslip\PayslipController@printPDF']);
});

コントローラー (PayslipController)

# HTML確認時
return view('payslip.pdf', $data);


# PDFファイル出力時
$pdf = PDF::loadView('payslip.pdf', $data)
        ->setPaper('a4')->setWarnings(false);

 return $pdf->download('payslip.pdf');

view

  1. resource/view/payslip/index.blade.phpを作成し、下記のリンクを貼る

aタグのリンクURL:{{route('payslip.pdf')}}?ym=201911 (例:2019年11月分)

  1. resource/view/payslip/pdf.blade.phpを作成し、PDF用内容を実装

日本語化への対応

  1. fontsディレクトリの作成 storage/fonts
  2. IPAフォントのダウンロード https://ipafont.ipa.go.jp/old/ipafont/download.html zipファイル解凍後、storage/fonts/ディレクトリの下にコピー
  3. CSSの@font-faceを利用

    @font-face{
        font-family: ipag;
        font-style: normal;
        font-weight: normal;
        src:url('{{ storage_path('fonts/ipag.ttf')}}');
    }
    @font-face{
        font-family: ipag;
        font-style: bold;
        font-weight: bold;
        src:url('{{ storage_path('fonts/ipag.ttf')}}');
    }
    

上記で日本語が正しく表示される

PDFのファイルサイズ問題

日本語化はできましたが、作成したファイルのサイズを確認すると4.5MBになっている。

下記の設定でファイルサイズ問題解決できる。
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"を実行
config/dompdf.php "enable_font_subsetting" => trueにする

4.5MBもあったファイルサイズが8KBのサイズまで小さくなり

レイアウト崩れる問題

今回はユーザーの給与明細をPDFで出力する機能の実装で、ユーザー名などはdivで表などはtableでviewファイルを実装。
最初はdivなどを使いhtmlで綺麗に表示されて、PDF出力モードに切り替えPDFに書き出すとレイアウトが崩れてしまう(困った)。
結果的にdivの部分を全部tableに書き直してなんとか解決できた。

参考サイト

https://reffect.co.jp/laravel/how_to_create_pdf_in_laravel

Viewing all articles
Browse latest Browse all 87

Trending Articles