はじめに
PHPを利用していてPDF出力を行うとき,FPDF系を使えという指示があったが,ググってもなかなか出てこないのでまとめる。
tFPDFのダウンロード
ここを参考に
問題
ググって見つかる japanese.php
や mbfpdf
を使う方法は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行目だけ,書き換える必要があった。
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変換のスクリプトをかけるだけで済む。