13
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel5+laravel-snappyでPDF出力する際のヘッダー・フッター設定とか改ページしたい時のあれこれ

Posted at

Laravel5+laravel-snappyでPDF出力機能実装した際に、少しハマったところがあったのでメモ。

導入方法はこの記事参考にさせていただきました。

Laravel5でLaravel-Snappy(wkhtmltopdf)を使用してPDF出力機能を実装してみる

環境

  • PHP7.1.1
  • Laravel5.3
  • laravel-snappy 0.3.1
route/web.php
Route::get('/', function() {
        $pdf = PDF::loadView('pdf', ['pages' => range(1, 3)])
            ->setPaper('A4')                                // 用紙サイズ
            ->setOption('encoding', 'utf-8')                // Encoding
            ->setOption('margin-top', 10)                   // 上マージン
            ->setOption('margin-bottom', 10)                // 下マージン
            ->setOption('margin-left', 10)                  // 左マージン
            ->setOption('margin-right', 10)                 // 右マージン
            ->setOption('orientation', 'Landscape')         // 横向き
            ->setOption('header-font-size', 16)             // ヘッダーフォントサイズ
            ->setOption('header-center', 'Header Center')   // ヘッダー中央
            ->setOption('header-left', 'Header Left')       // ヘッダー右
            ->setOption('header-right', 'Header Right')     // ヘッダー左
            ->setOption('footer-font-size', 16)             // フッターフォントサイズ
            ->setOption('footer-left', 'Footter Left')      // フッター右
            ->setOption('footer-right', 'Footter Right')    // フッター左
            ->setOption('footer-center', '[page] ページ')    // フッター中央 [page]でページ番号が自動で入ります
            ->setOption('header-font-name', 'IPAexMincho')  // ヘッダーフォント名
            ->setOption('footer-font-name', 'IPAexMincho'); // フッターフォント名

        // インラインでPDF表示
        return $pdf->inline();

        // ダウンロードする場合
        return $pdf->download('download.pdf');
});

ヘッダー・フッター周りはsetOptionで設定します。これがわからず、HTML側のフォントと違うフォントで出力されてしまって結構ハマった。

Bladeファイルを作成

resource/view/pdf.blade.php
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
    <head>
        <title>PDF出力テスト</title>
        <style>
            .page {
                page-break-after: always;
                page-break-inside: avoid;
            }
            .page:last-child{
                page-break-after: auto;
            }
        </style>
    </head>
    <body>
@foreach ($pages as $page)
        <div class="page">
            {{ $page }}ページ目
        </div>
@endforeach
    </body>
</html>

PDF出力でBladeテンプレート使えるのはかなり便利(小並感

".page:last-child{ page-break-after: auto; }" これが無いと改ページしても、最後に余計なページができてしまう。

出力するとうまく改ページされて表示できます。
laravel-snappy.png

13
22
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
13
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?