Posted on

TCPDFでいつの間にか日本語のフォント・サブセットが使えるようになってた!!

いつもお世話になってるTCPDFですが
VER 5.2.000よりフォント・サブセットを使用できるのは知っていたのですが
日本語で使用するとCPUとメモリを使いすぎて使い物になりませんでした・・・

今までどおりフォントの全て埋め込みで対応していたのですがやはり3MBオーバーは重いなーと思っていました。(バックアップ用に生成したPDFとか置くのはとても無理でした)

以前案件で軽いPDFを出す必要がありだめもとで新しいTCPDF(6系)を使ってみたところ・・・
使えるようになってました!!(数100kbとかで出力できたりします。)

これでお客さんに重いって言われなくなります!

以下サンプルと注意事項です。

  1. require_once('tcpdf_include.php');  
  2. require_once('lang/jpn.php');  
  3. $pdf = new TCPDF('L''mm''A4', true, 'UTF-8');  
  4. $font = new TCPDF_FONTS();  
  5. // フォント・サブセットを使用するか(初期はtrueなので呼ばなくてもいい)  
  6. $pdf->setFontSubsetting(true);  
  7. // ttfフォントファイルからtcpdf用フォントファイルを生成(tcpdf用フォントファイルがある場合は再生成しない)  
  8. $fontX = $font->addTTFfont('/xxx/tcpdf/fonts/ttf/ipag.ttf');  
  9. $pdf->SetFont($fontX , '', 14);  
  10. // 上記でフォントが生成できたら上2行の変わりにこちらを使用でいい  
  11. // $pdf->SetFont('ipag', '', 14, '');  
  12. $pdf->AddPage();  
  13. $pdf->Text( 10, 10, "フォントを、IPAゴシック で表示" );  
  14. $pdf->Output('test.pdf''I');  

上記で勝手にtcpdf用フォントファイルを制定してpdf出力までやってくれます。以前ttfファイルを作る為にコマンドをしていましたが必要なくなったようです。

注意!! /xxx/tcpdf/fonts以下に以前のtcpdf用フォントファイルを置かないでください。フォントファイル生成処理が走りませんし、$pdf->setFontSubsetting(true);にするとエラーになります。