TCPDFで日本語カスタムフォントをPDFに埋めこむ方法
TCPDFで日本語カスタムフォントをPDFに埋めこむ方法
TCPDFでカスタムフォント(IPAexゴシック)を使用してPDFを作成したが、
PDFにフォントが埋め込まれておらず表示する環境によりフォントが変わっていた。
その原因と対応について記載する。
環境
- PHP 7.2.10
- setasign\Fpdi ver.2
- tecnickcom/tcpdf ver.6.2.25
- IPAexゴシック ver.003.01
現象
コマンドで事前に登録したフォントをPHPで設定しPDFの作成をしていたが、
PDFにフォントが埋め込まれていない。
フォントを登録するコマンド(PDFに埋め込まれない)
php ./vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t CID0JP -f 32 -i ./resources/fonts/ipaexg00301/ipaexg.ttf
PHPでフォントを設定した部分のコード
$pdf = new Fpdi\TcpdfFpdi();
$pdf->SetFont('ipaexg');
// 以降でファイル内容の作成処理
対応
フォントを登録するコマンドが誤っていた。
IPAexフォントのReadmeにもあるとおり、IPAexフォントはTrueTypeアウトラインベースのOpenTypeフォント
(TrueTypeフォントの拡張版)なので、TrueTypeで登録する必要がある。
# CID0JPのフォント種類で追加⇒ipaexg.phpファイルしか作成されない php ./vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t CID0JP -f 32 -i ./resources/fonts/ipaexg00301/ipaexg.ttf # TrueTypeUnicodeのフォント種類で追加(-tオプションで指定しない場合も同様) # ⇒ipaexg.ctg.z, ipaexg.php, ipaexg.z の3ファイルが作成される php ./vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t TrueTypeUnicode -f 32 -i ./resources/fonts/ipaexg00301/ipaexg.ttf
また、TCPDFの仕様でそもそもコアフォントとCID-0フォントはPDFに埋め込みされないようである。
The fonts that could be not embedded are only the standard core fonts and CID-0 fonts.
参考
TCPDF をダウンロードして、フリーフォントを埋め込み型で使用する方法
http://logicalerror.seesaa.net/article/374474910.html
感想
浅い理解ではあるが、とりあえず問題は解消。
フォントの知識がまるで無かったので、フォント種類の名前くらいは分かるようにはなった。
ただ疑問なのが、CID0JPって結局なんなのだろうか。 CIDフォントなのは分かるが詳しイことが分からない。Adobe-Japan1-0のこと?