PHP
tFPDF

tFPDFで日本語フォントを利用する

はじめに

PHPを利用していてPDF出力を行うとき,FPDF系を使えという指示があったが,ググってもなかなか出てこないのでまとめる。

tFPDFのダウンロード

ここを参考に

問題

ググって見つかる japanese.phpmbfpdf を使う方法はFPDF公式サイト見てもらえばわかる通り,リンクが消えている。

正確には,以前は各言語ごとにパッチを配布していたのが,UTF-8対応のtFPDFを配布する形になっている。
しかし,tFPDFにはUTF-8対応フォントの「DejaVu」含まれているが,日本語は入っていない。

日本語フォントを準備する

日本語フォントが入ってないのなら,自分で準備すればいい,ということで,自前でフォントを準備する。

Macに入っているフォントは全て,改変・配布をしないのであれば自由に使用していいらしい(参考)ので,ありがたく使うことにする。

例として「ヒラギノ丸ゴ」を使った場合を。

フォントを書き出し

まずは,FontBookを開き,ヒラギノ丸ゴを「右クリック→Finderで表示」を選び,デスクトップなどにコピペする。

ファイル名に日本語が入っていると後の工程で詰まるため,ディレクトリ名・ファイル名全てアルファベットに書き換えておく。
(ファイル名を「HiraginoMaruGo.ttc」へ変更した)

フォントファイルの分解

このファイルは .ttc ファイルとなっている。
これは TrueType Fonts Collections という意味らしく,文字幅(W0とかW1とか)を複数まとめてあるもので,tFPDFは対応していない。

ERROR - TrueType Fonts Collections not supported

と言われてしまう。

これを分解するために, fontforge を使用する。
HomeBrewでインストールできるので,

$ brew install fontforge

サクッとインストールを行う。

このスクリプトを利用して,ttcファイルを変換する。
8行目だけ,書き換える必要があった。

ttc2ttf.pe
8: Open($1 + "(" + fonts[i] + ")", 1)  →変更→  Open($1, 1)

同ファイル2行目にあるように実行する。

$ fontforge -script ttc2ttf.pe ./HiraginoMaruGo.ttc

すると, .otf ファイルが出力される。

(スクリプト内で書かれているが, $order == 3 の時だけ .otf が出力されるようになっているがそれが何なのかはよくわからない)

otfからttfへ変換

.otf ファイルも対応していないため,

ERROR - Postscript outlines are not supported

と言われてしまう。

次にすることはこれをttfファイルへ変換することだ。

このスクリプトをそのまま利用させていただく。

これで晴れて .ttf ファイルが出力されたので, tFPDF/font/unifont の中に配置する。

完成

あとは以下のように書けば日本語が出力される。

<?php
require_once('./lib/tfpdf/tfpdf.php'); // 自分の環境に応じて書き換えを

$pdf = new tFPDF();
$pdf->AddPage();

// Add a Unicode font (uses UTF-8)
$pdf->AddFont('YuGothic','','YuGothic-Medium.ttf',true); // ファイル名は適宜書き換えを
$pdf->SetFont('YuGothic','',14);

// Load a UTF-8 string from a file and print it
$txt = '日本語テスト';
$pdf->Write(8,$txt);

$pdf->Output();

おまけ

游ゴシック体を使おうとしたとき,Finderで表示が選択できなかったため,「ファイル→フォントの書き出し...」を選んで任意の場所(デスクトップなど)に出力するといい。
この場合でもディレクトリ名やフォルダ名は全て英数字で。

游ゴシック体の時は書き出した時点で .otf ファイルなので otf→ttf変換のスクリプトをかけるだけで済む。