LoginSignup
1
1

More than 1 year has passed since last update.

laravel-pdfdomを導入してPDF出力機能を実装する

Last updated at Posted at 2023-04-18

はじめに

案件でPDF出力機能の実装が必要となったのでdompdfを導入した
他にもmPDFだったり他候補もあったが導入に苦戦したりとあったので結果dompdf導入となった
他のPDFツール以下を参考に。
https://qol-kk.com/wp2/blog/2022/08/09/post-3180/

導入手順

①dompdfをインストール

composer require barryvdh/laravel-dompdf コマンドを実行
そうするとcomposer.jsonのrequireにdompdfが追加される。

composer.json
"require": {
        "php": "^8.1.13",
        "barryvdh/laravel-dompdf": "^2.0",

②Controller作成

php artisan make:controller DompdfController

DomodfController.php
<?php

namespace App\Http\Controllers;

use Barryvdh\DomPDF\Facade\Pdf; // 追記

class DompdfController extends Controller
{
    public function generatePDF()
    {
        $pdf = PDF::loadView('dompdf.pdf');
        return $pdf->download('PDFダウンロード.pdf');
    }
}

③Viewを作成する

PDFで出力するファイルを作成しておきましょう。
resources/views 配下にdompdfディレクトリを追加し、そこにpdf.blade.phpを作成しましょう。
中身はプロジェクトによって異なるため、基本的な実装のみ記述します。

pdf.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>PDF出力</title>
    </head>
    <style>
    </style>
    <body>
        ここに中身を記述する
    </body>
</html>

④日本語フォントを導入する

dompdfを導入するだけだと日本語に対応していないため、日本語フォントを導入する必要があります。
いくつか日本語フォントは存在するため何でも大丈夫ですが、今回はIPAフォントを導入します。
https://moji.or.jp/ipafont/ipaex00401/

fontsディレクトリを作成し、フォントファイルを格納する

storage配下にfontsディレクトリを追加し、ダウンロードしたttfファイルを格納します。
storage/fonts/ipaexg.ttf
スクリーンショット 2023-04-18 10.10.21.png

bladeファイルに必要事項を記述し、日本語フォントを適用させる

ただファイルを格納するだけでは有効にすることができません。
bladeファイルに必要なことを記述し、適用させましょう。

pdf.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>PDF出力</title>
    </head>
    <style>
        /* dompdf日本語文字化け対策 */
        /* 基本の文字 */
        @font-face {
            font-family: ipaexg;
            font-style: normal;
            font-weight: normal;
            src: url('{{ storage_path('fonts/ipaexg.ttf') }}');
        }
        /* 全てのHTML要素に適用 */
        html, body, textarea {
            font-family: ipaexg, sans-serif;
        }
    </style>
    <body>
        ここに中身を記述する
    </body>
</html>

⑤ルートを記載する

最後にアクセスするためのルートを記載します。
api.phpでもいいですが、今回はweb.phpに書いていきます。

web.php
use App\Http\Controllers\DompdfController;

Route::get('dompdf/pdf', [DompdfController::class, 'generatePDF']);

これで、http://localhost:8080/dompdf/pdfへアクセスするとPDFが出力されるはずです。
以上。

参考

https://github.com/barryvdh/laravel-dompdf
https://itcrest.co.jp/laravel-dompdf/

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1