tohokuaikiのチラシの裏

技術的ネタとか。

mpdfで日本語のフォントを追加したり、文字化けを回避したり

mpdfのバージョンは、5.4です。

mPDFというHTMLをPDFに変換してくれるライブラリがあります。
素晴らしいのですが、おそらくこちょこちょとつぎはぎつぎはぎで*1コードがメチャ読みにくいのと、Configが散乱しててとにかく「デフォルトのフォント以外のものを使う」というのにかなり苦労したのと、mPDFの良いブログ記事があったのに企業のブログだったせいでリニューアル時に無くなってしまったのに異を唱えたく。jQueryのどーとかなんてどうでもいいっつーの。

日本語を使う

まず、config.phpにて

<?php
$this->useAdobeCJK = true;

としてやる。

さらに、mPDF Version 5.4 の日本語文字化けを直す方法 - [Swb:]渋谷に住むWEBデザイナの備忘録によるとmpdf.phpの1145-1146をコメントアウトするってあるけど、コード見るとコンストラクタの第一引数に'ja'って入れておけばOKだろう。

フォントの追加

まず、TTFかTTCフォントをどっかから入手してttfontsディレクトリに入れてやる。IPAフォントなんかいいんじゃないか?

フォントファイルには拡張子がTTFとTTCとの2種類ある。WEB屋にはTTFとTTCの違いがまずわからない。mPDFはどっちも使える。

フォントを加えるには、config_fonts.phpの $this->fontdata に配列を加える。

TTFの場合、ファイル名を指定するだけでOK。

<?php
"ipa" => array(
	'R' => "msgothic.ttc",
	),

TTCの場合、TTCfontIDというのを指定しないといけない。これはTTCというのは複合フォントのセットなので、その何番目かと言うことなんだろう。何番目かとかは自分で調べるしかない。

<?php
"msgothic" => array(
	'R' => "msgothic.ttc",
        'TTCfontID' => array (
            'R' => 1,
            ),
	),

追加したFONTを使えるようにする

さっきのでもう使えるようにしてほしいジャンという気持ちなのだけど、config_cp.phpでさらに付け加える。さっき、$this->font_dataで、加えた"msgothic"というのを使うにはconfig_cp.phpの95に

<?php
	  // CJK Langauges
	  CASE "ja":  
		if ($adobeCJK) {
			$unifonts = "msgothic,sjis,sjisB,sjisI,sjisBI";
		}

というように先頭に加えてやる。後ろじゃ駄目みたい

文字化けを解消

ここまでの設定も「なにその裏設定」みたいな感じなのだけど、さらに文字化け問題が発生。
『株式会社シンプル・アイ』 ブログ » mPDF5.xでTTFフォント使用時に一部の文字が四角で出力に詳しく書かれているのだけど、かいつまむと、config_fonts.phpの$this->BMPonlyの配列にさっき追加したフォントの名前を加える。さっきまでの例だと

<?php
    $this->BMPonly = array(
    "msgothic",

という感じ。

変なところで回り込みされる

わかるんだけど、やめてくれっていうのが回り込み。日本語をだーっと書いてて、英単語が続くとき、ここぞとばかりに最初の英単語の空白で折り返しを入れられる。困る。

そこで、空白を全部&nbsp;に一斉置換したら何とかなった。

*1:まぁ、PDFを出すという目的上、致し方ない気はする