入門 4 - テキストを出力する (II) -
2. CJKフォント
漢字フォントは、PDFではCJK(日中韓)フォントのひとつとして扱われます。CJKフォントは日本語版Acrobatに装備されている標準CJKフォントとそれ以外のカスタムCJKフォントの2種類があり、それぞれ PDFlib での取り扱い方が異なります。CJKフォントの詳細は、日本語チュートリアルマニュアルの「7.5 日本語・中国語・韓国語テキストの出力」に記述されています。
標準CJKフォント
※ PDFlib 9 より、標準CJKフォントの使用は非推奨になりました。下記のカスタムCJKフォントの使用を推奨します ※
標準CJKフォントはAdobe社の日本語Acrobat製品やアジア言語フォントパックに装備されている特定のフォントです。標準CJKフォントはAcrobatのバージョンにより下表のようになります。
表 Acrobat各バージョンの標準CJKフォント
Acrobat4 |
HeiseiKakuGo-W5
HeiseiMin-W3
|
Acrobat5 |
KozMinPro-Regular-Acro |
Acrobat6 |
KozGoPro-Medium-Acro |
Acrobat7 以上 |
KozGoPro-Medium
KozMinProVI-Regular
|
標準CJKフォントはPDF作成機能を持ったAcrobat製品では装備されていますが、無償で配布されているAcrobat(Adobe Reader)では装備されていません。このため、標準CJKフォントを指定したPDFをAcrobat Readerで表示するとOSで利用可能なフォント、たとえばWindowsではMSゴシックやMS明朝などで代替表示されます。Acrobat Readerで標準CJKフォントを表示するには、アジア言語パックをインストールします。(Adobe Acrobat 6 以降および Adobe Reader 6 以降では、必要になったタイミングで自動的にダウンロード、インストールされます)
標準CJKフォントは、カスタムCJKフォントと違って文書に埋め込む必要がないこと、Adobe社のCMapエンコーディングを使用できることが特徴です。このため、シフトJISやEUCなどのエンコーディングを使用することができます。使用できるCMapは、マニュアルTable4.6に記載されています。
また非Unicode系のCMapを使用している場合、stringwidth()が使えない、create_textflow()などTextflow関連関数が使えないなどの制限事項があります。
カスタムCJKフォント
PDFlib では上記の標準CJKフォント以外のフォントをカスタムCJKフォントといいます。TrueType及びOpenType形式のフォントをカスタムCJKフォントとして扱うことができます。カスタムCJKフォントには以下の特徴があります。
- フォントはCIDフォントに変化され、必ず埋め込みとなります。
- デフォルトでは埋め込みはサブセッティングとなります。
- プロポーショナルの欧字及び半角文字がサポートされています。
- 日本語ホストフォント名をUTF-8またはUCS-2エンコーディングで指定できます。
また、以下のエンコーディングを使用することができます。
- Windowsでは、システムにインストールされているコードページによるエンコーディング
- unicode エンコーディング
- 8ビットエンコーディング
- グリフIDアドレッシング
カスタムCJKフォントを使用する場合、TrueType または OpenType のフォントファイルを用意する必要があります。例えば 独立行政法人 情報処理推進機構 (IPA) が公開している IPA フォントは、PDF に埋め込むことができます (ご使用の際は「IPA フォントライセンス」の内容に同意する必要があります)。
フォントファイルが用意できたら、PDFlib で利用できるようにロードする必要があります。下記は PHP でフォントをロードする場合のサンプルです。
//フォントをロードする
// PHP がアクセス出来る場所に設置されている必要があります
// searchpath で日本語フォントのあるディレクトリを指定します
$p->set_option("searchpath=resource/fonts");
// FontOutline に MS 明朝 を追加します
$p->set_option("FontOutline={MS-Mincho=msmincho.ttc}")
// MS 明朝をロードし、そのハンドルを $font に格納します
// ロードに失敗した場合、PHP では 0 (その他の言語では -1) が返ります
$font = $p->load_font("MS-Mincho", "unicode", "");
if ($font == 0) {
die("Error: " . $p->get_errmsg());
}
PHP 8 / PDFlib 10
ロードしたフォントは、PDF 文書を閉じる ($p->end_document("")) か、明示的にクローズする ($p->close_font($font)) まで繰り返し使用することができます。実際にテキストを書き出す手順は次ページで解説しています。
(Nov 10, 2006 - Dec 6, 2021)