オブジェクト指向とかデザインパターンとか開発プロセスとかツールとか

satoshi's ソフトウェア開発

js






当サイトはアフィリエイト広告を利用してます。

Laravel

LaravelでLaravel-dompdfを使ってPDFを生成する方法

投稿日:


Laravelで構築している案件で、契約書的なものをExcelでテンプレートを作っておいて、そこにデータを埋め込んでPDFを生成したいという話が出てきました。

さっそく、「laravel excel pdf」でぐぐってみたら、なんだかみなさん苦労している雰囲気が。

ただ、ヒヤリングをしたところ、Excelによるテンプレートは必須ではなく、必要事項が記入されていればOKとのこと。

ハードルがひとつなくなりました。

こちらのさいとを見ながら実装してみました。

Laravel-dompdf が使いやすくなってた件

まずパッケージをインストールします。

% composer require barryvdh/laravel-dompdf

日本語を表示するには、日本語フォントファイルを用意しておく必要があります。

こちらからダウンロードします。

https://moji.or.jp/ipafont/ipafontdownload/

IPAexフォント Ver.004.01 のリンクをクリックして進みます。

ライセンスの下にあるリンクからダウンロードできます。

解凍してみると、参考サイトとはファイル名が異なっていますが、読み替えれば大丈夫でしょう。

*.ttf を、laravel 内の storage/fonts フォルダにコピーします。

% mkdir storage/fonts
% cp -p ~/Downloads/IPAexfont00401/*.ttf storage/fonts

これで準備ができました。

bladeでビューを作ります。

今回は売買契約書なので、sales_certificate.blade.php というファイル名にしておきます。

書体は明朝体を指定します。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <style type="text/css">
        @font-face {
            font-family: ipam;
            font-style: normal;
            font-weight: normal;
            src: url('{{ storage_path('fonts/ipaexm.ttf') }}') format('truetype');
        }
        @font-face {
            font-family: ipam;
            font-style: bold;
            font-weight: bold;
            src: url('{{ storage_path('fonts/ipaexm.ttf') }}') format('truetype');
        }
        body {
            font-family: ipam !important;
        }
        </style>
    </head>
<body>
はろーわーるど!
</body>
</html>

route/web.php にルーティングを追加します。

Route::get('/salesCertificate', [App\Http\Controllers\IndexController::class, 'salesCertificatePdf'])->name('salesPdf');

コントローラからPDFを出力してみます。

    public function salesCertificatePdf()
    {
        $pdf = \PDF::loadView('sales_certificate');
        return $pdf->stream('sales_certificate.pdf');
    }

無事にPDFを表示できました!

あとは、table タグを使って契約書っぽい書式にして、必要なデータを埋め込めば完了です。







-Laravel
-, ,

Copyright© satoshi's ソフトウェア開発 , 2024 All Rights Reserved Powered by STINGER.