matsudada技術ブログ

日々の雑念と備忘録

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.

https://tcpdf.org/docs/fonts/

参考

TCPDF をダウンロードして、フリーフォントを埋め込み型で使用する方法
http://logicalerror.seesaa.net/article/374474910.html

感想

浅い理解ではあるが、とりあえず問題は解消。
フォントの知識がまるで無かったので、フォント種類の名前くらいは分かるようにはなった。

ただ疑問なのが、CID0JPって結局なんなのだろうか。 CIDフォントなのは分かるが詳しイことが分からない。Adobe-Japan1-0のこと?