入門 3 - テキストを出力する (I) -
マニュアルでも述べているようにPDFのような複合ドキュメントにおけるテキストの処理はややこしい問題を抱えています。この問題はフォントの種類や形式、エンコーディング、レイアウトなど多岐にわたります。日本語チュートリアルマニュアルの「第6章 フォント処理」ではフォントやエンコーディングについてかなり詳細に記述しています。本稿では主にCJK(中日韓)フォントの取扱いについて説明します。
1. 全般的な事項
PDFlib のサポートするフォント
PDFlib では以下に述べるフォントをサポートしています。サポートしているフォントの詳細は 日本語チュートリアルマニュアルの「6.1 フォント形式」を参照してください。またフォントのサポートといったときにどのエンコーディングで処理が可能かということも関連していることに注意してください。
- TrueTypeフォント
ベクターベースのTrueTyepフォントをサポートしています。
- OpenTypeフォント
TrueType形式のアウトラインを持つもの(*.ttf)及びPostScript形式のアウトラインを持つもの(*.otf)の両形式のOpenTypeフォントをサポートしています。またPDFlib 10よりOpenType Colorフォントにも対応しています。
- WOFF, WOFF2フォント
TrueType や OpenType をウェブ向けに拡張したフォント。PDFlib 10 ではダウンロード機能により、ネットワークから WOFF フォントをダウンロードしてそのまま出力に使用できます。
- PostScript Type1 フォント (※ PDFlib 10 より非推奨)
主要な形式のPostScript Type1フォントをサポートしています。
- SIGN フォント (Glyphlets)
CJKテキストの外字等に対応するためのOpenTypeフォント形式のフォント。Unicodeの範囲外の文字等を外字として扱います。
- Type 3フォント
ユーザ定義型(Type 3)のPDFフォントを定義して使用することができます。Type 3フォントはロゴなどの出力に用いるもので PDFlib の中で直接定義して使用する必要があります。
フォントの埋め込み
Acrobatに組み込まれている14種の欧文コアフォント以外については、フォントを文書内に埋め込むかどうか、埋め込む場合にSubsettingを行うかどうかを考慮する必要があります。
フォントの埋め込みはload_font()で、embeddingオプションをtrueまたはfalse(デフォルト値)にすることにより指定します。ただし特定のエンコーディングとフォント種類の組み合わせの場合には、embeddingオプションの指定に関わらずフォントが強制的に埋め込まれます。(日本語チュートリアルマニュアルの「6.5.1 フォントの埋め込み」参照)
出力されるPDFファイルのサイズを小さくするためにそのPDFファイルが使用しているフォントだけをPDFファイルに含むことができます。これをSubsettingといいます。Subsettingは、autosubsetting(subsettingを行うかどうかの指定)、subsetvalue(ここで指定したパーセント値を超えるフォントを使用している場合は、Subsettingを中止して全てのフォントを埋め込む)、及びsubsetminisize(ここで指定したサイズより小さなフォントのSubsettingは行わない)といったパラメータの指定により制御します。
エンコーディング
マニュアルでは、「文字列中のバイト列がどのように PDFlib やAcrobatで解釈され、ページ上のテキストに翻訳されるかを規定するもの」を「エンコーディング」としています。サポートされている複数のエンコーディングをドキュメント上で任意に使用することができます。特定のフォントでどのエンコーディングを適用できるかはフォントにより違いますので留意する必要があります。
個々のグリフ(字形)を特定するには以下の3種類の方法があります。
- グリフの名前による (PostScript Type1フォント)
- Unicodeによる (TrueType、OpenTypeフォント)
- CID(Character ID)による (CJKフォント)
これらの方法は固定的に適用されるわけではなく、たとえばTrueTypeフォントは互換性のためにPostScriptのグリフ名を補助的に持つこともできます。
8ビットエンコーディング
PDFlib で使用される8ビットエンコーディングはグリフ名及びUnicodeに基づいています。8ビットエンコーディングには既定のエンコーディング(日本語チュートリアルマニュアル「5.3.3 シングルバイト (8ビット) エンコーディング」参照)、ユーザ定義エンコーディングなどがあります。
マルチバイトエンコーディング
漢字を含むマルチバイト文字を指定するための以下のようなエンコーディングがあります。
- Unicodeべース (「unicode」でエンコーディングを指定し、UTF-8、UTF-16などで文字列を指定します。)
- CMapベース (標準CJKフォントに使用します。)
- グリフIDベース (TrueType、OpenTypeでは「glyphid」でエンコーディングを指定し、直接グリフを指定することができます。)
(Nov 10, 2006 - Dec 6, 2021)