# HTML から PDF に変換 PHP ライブラリ mPDF の設定

mPDF について
mpdf 5から長年 mpdf 愛用しておりますが、現在バージョンは8です。公式サイトはまだ v7 のままですが、試したところ使い方は変っていない模様。mpdf は html から pdf に変換するための php ライブラリです。FPDFHTML2FPDFをベースにして、機能強化及び性能アップして作られたそうです。

mpdf を選ぶ理由

同類のライブラリは複数ありますが、自分が使ってて良かったと思うところ

  • 軽い (他のライブラリよりビルドが速い)
  • 機能性 (改ページ、ヘッダー設定、ダウンロード機能など)
  • ライブラリがわかりやすい (config ファイルやマニュアルが詳しい、わかりやすい、設定が楽)
  • 多言語対応 (日本語、韓国語、中国語、アラビア語など、文字化けなしで多言語対応)

composer install

composer require mpdf/mpdf

package mpdf/mpdf (opens new window)

php に取り込む

<?php

require_once __DIR__ . '/vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>Hello world!</h1>');
$mpdf->Output();

# 日本語対応

当初日本語対応するのに、フォントをダウンロードしていろいろ設定もいじらなくてはならなかったが、バージョン 6 からコンフィグを2行設定するだけで、日本語韓国語中国語が対応できるようになり、非常に便利

config

  • autoScriptToLang
  • autoLangToFont

結論から言うと、デフォルトではfalseになっていますが、trueにするだけで完了

sample






 
 




<?php

require_once __DIR__ . '/vendor/autoload.php';

$mpdf = new \Mpdf\Mpdf([
    'autoScriptToLang' => true,
    'autoLangToFont' => true,
]);
$mpdf->WriteHTML('<h1>Hello こんにちは、漢字日本語!</h1>');
$mpdf->Output();

$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
でも一緒

# フォント変更

デフォルトのフォントは明朝体ぽいが、丸めの IPA ゴシックに変更します。

  1. IPA フォント (opens new window)ダウンロード
  2. フォント TTF ファイルを適切のディレクトリに保存
  3. config 設定変更
    autoScriptToLang autoLangToFont の自動判別機能をオフにして
// デフォルト設定読込
$defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
$fontDirs = $defaultConfig['fontDir'];
$defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
$fontData = $defaultFontConfig['fontdata'];

// mpdf初期化
$mpdf = new \Mpdf\Mpdf([
    // 'autoScriptToLang' => true,
    // 'autoLangToFont' => true,
    'orientation' => 'L',     // 横向き
    'defaultheaderline' => 0, // ヘッダーアンダーライン消す
    'fontDir' => array_merge($fontDirs, [
        app_path('font'),     // Laravel app/fontディレクトリに保存
    ]),
    'fontdata' => $fontData + [
        'mplus' => [                      // Google フォント
            'R' => 'MPLUS1p-Regular.ttf',
            'B' => 'MPLUS1p-Bold.ttf',
        ],
        'ipag' => [                       // ipag IPAゴシックフォント
            'R' => 'ipag.ttf',
            'B' => 'ipag.ttf',
            'I' => 'ipag.ttf',
            'BI' => 'ipag.ttf',
        ],
        'ipagp' => [                      // ipagp IPAゴシックPフォント
            'R' => 'ipagp.ttf',
            'B' => 'ipagp.ttf',
            'I' => 'ipagp.ttf',
            'BI' => 'ipagp.ttf',
        ],
        'ipaexg' => [                     // ipaexg IPAexgゴシックフォント
            'R' => 'ipaexg.ttf',
            'B' => 'ipaexg.ttf',
            'I' => 'ipaexg.ttf',
            'BI' => 'ipaexg.ttf',
        ],
    ],
    'default_font' => 'ipaexg',           // デフォルトで使うフォント指定
]);

# 縦書き

mpdf はwriting-mode: vertical-rl;CSS の対応していないため、スタイルシートで縦書きはできないが、プログラムで文字列を配列にして一文字ずつ出力することで縦書き風にします。

foreach (preg_split('//u', $str_item, -1, PREG_SPLIT_NO_EMPTY) as $value){
    echo $value . '<br />';
}

# トータルページ番号表示

ヘッダーかフッターにページ番号と合計ページ数表示する時

// ヘッダーに設定
$mPDF->setHeader('{PAGENO} / {nb}ページ');

// フッターに設定
$mPDF->setFooter('{PAGENO} / {nb}ページ');

ヘッダー フッターに使えるエリアス

  • {PAGENO} ページ番号
  • {nb} トータルページ数
  • {DATE j-m-Y H:m} 日付時間 PHP date 関数

# config 設定

# Paging ページ関連

項目 デフォルト 備考
mirrorMargins (opens new window) 0 1に設定すると、ドキュメントは奇数ページと偶数ページの左右のマージン値をミラーリングします。つまり、内側と外側のマージンになります。
forcePortraitMargins (opens new window) false デフォルトのページ方向が P(縦)の場合、新しいページ L(横)を追加すると、左/右マージンが上/下として使用され、逆も同様
displayDefaultOrientation (opens new window) false デフォルトのページの向きが P(縦)の場合、ドキュメント内の L(ランドスケープ)ページは Adobe Reader で表示され、縦に表示
autoPageBreak (opens new window) true 自動改ページを許可するかどうかを指定
setAutoTopMargin (opens new window) false ドキュメントの上部余白を定義する動作を指定
setAutoBottomMargin (opens new window) false 下·部余白を定義
autoMarginPadding (opens new window) 2 「ストレッチ」モードで、上部マージンとヘッダーの間のパディングを指定
margBuffer (opens new window) 2 (空の)ブロックの終わりがこの量(mm)だけ下マージンを超えて広がることを許可
printers_info (opens new window) false @page および marks:crop を使用するときに、プリンターの日付とページ情報を追加
bleedMargin (opens new window) 5 @page メディアで使用されるデフォルトの裁ち落としマージンをミリメートル単位で設定
crossMarkMargin (opens new window) 5 マージンからの十字マークの距離(mm)
cropMarkMargin (opens new window) 8 マージンからクロップマークまでの距離(mm)
cropMarkLength (opens new window) 18 クロップラインの mm 単位のデフォルトの長さ
nonPrintMargin (opens new window) 8 用紙の端の印刷不可能な境界(mm)
defaultPagebreakType (opens new window) cloneall <改ページ/>を使用して、強制改ページの改ページを入力します。

# Page numbering

項目 デフォルト 備考
aliasNbPg (opens new window) {nb} ドキュメント内の合計ページ番号で置換されるテキストを定義する変数
aliasNbPgGp (opens new window) {nbpg} ページグループ内の合計ページ番号で置換されるテキストを定義する変数
pagenumPrefix (opens new window) {PAGENO}を使用してヘッダーまたはフッターにページ番号を挿入する場合、ページ番号の前にテキストを指定
pagenumSuffix (opens new window) {PAGENO}を使用してヘッダーまたはフッターにページ番号を挿入するときに、ページ番号に続くテキストを指定
nbpgPrefix (opens new window) {nbpg}によって生成されたページ合計の前にテキストを指定
nbpgSuffix (opens new window) {nbpg}によって生成されたページの合計に従うテキストを指定
defaultPageNumStyle (opens new window) 1 ドキュメントの最初から使用するデフォルトのページ番号スタイルを指定

# Fonts, Languages and Character sets

項目 デフォルト 備考
autoScriptToLang (opens new window) false
autoLangToFont (opens new window) false

# Page Headers & Footers

項目 デフォルト 備考
defaultfooterfontsize 8
defaultfooterfontstyle BI
defaultfooterline 1
defaultheaderfontsize 8
defaultheaderfontstyle BI
defaultheaderline 1
footer_line_spacing 0.25
header_line_spacing 25
forcePortraitHeaders false

# 参考

mPDF 公式マニュアル(英語) (opens new window)

2019-12-12
  • php

関連記事

正規表現一覧 よく使う検索・置換のパターン
Apache 初期設定メモ
Elastic Beanstalk \$\SERVER['REMOTEADDR'] 取得できない
codeigniter email ライブラリでメール送信 日本語対応
php 開発におけるコーディングルール・規約
PHP empty isset is_null の違い
php curl 使って クリックなしで POST 送信
FlattenException deprecated
allowurlinclude の設定で ftp_connect()エラー
Lumen と Laravel 違い比較
Laravel 5.7 の MVC 使う時のメモ
PHP 8 リリース新機能と変更
解決!phpMyAdmin テーブル構造の内容が表示されない問題
Smarty HTTP URL 取得できるサーバー関数
twig 3 人気 PHP テンプレートエンジンがバージョンアップ
開発時によく使うゼロ埋めパディング作業まとめ
nuxtjs と codeigniter で jwt システム構築
PHP 7.4 にアップグレードして使えなくなる機能
php.ini 初期設定のいろいろ
爆速軽量フレームワーク codeigniter PHP 開発
Composer コマンドとオプション
Laravel Error についてのメモ