パーソナルビジネスソフトとお役立ち情報のサイト
PDFlib入門 - PDF文書をプログラムで作ろう -

4.テキストを出力する

 マニュアルでも述べているようにPDFのような複合ドキュメントにおけるテキストの処理はややこしい問題を抱えています。この問題はフォントの種類や形式、エンコーディング、レイアウトなど多岐にわたります。マニュアルの「第5章 Font Handling」ではフォントやエンコーディングについてかなり詳細に記述しています。本稿では主にCJK(中日韓)フォントの取扱いについて説明します。

4.1全般的な事項

PDFlibのサポートするフォント

 PDFlibでは以下に述べるフォントをサポートしています。サポートしているフォントの詳細はマニュアルの「5.2 Font Format Details」を参照してください。またフォントのサポートといったときにどのエンコーディングで処理が可能かということも関連していることに注意してください。
  1. PostScript Type1 フォント
    主要な形式のPostScript Type1フォントをサポートしています。
     
  2. TrueTypeフォント
    ベクターベースのTrueTyepフォントをサポートしています。
     
  3. OpenTypeフォント
    TrueType形式のアウトラインを持つもの(*.ttf)及びPostScript形式のアウトラインを持つもの(*.otf)の両形式のOpenTypeフォントをサポートしています。
     
  4. CJK(中日韓)フォント
    Acrobatの標準CJKフォントに加え、TrueType及びOpenType形式のCJKフォントをサポートしています。
     
  5. Type 3フォント
    ユーザ定義型(Type 3)のPDFフォントを定義して使用することができます。Type 3フォントはロゴなどの出力に用いるものでPDFlibの中で直接定義して使用する必要があります。

フォントの埋め込み

 Acrobatに組み込まれている14種の欧文コアフォント以外については、フォントを文書内に埋め込むかどうか、埋め込む場合にSubsettingを行うかどうかを考慮する必要があります。

 フォントの埋め込みはload_font()で、embeddingオプションをtrueまたはfalse(デフォルト値)にすることにより指定します。ただし特定のエンコーディングとフォント種類の組み合わせの場合には、embeddingオプションの指定に関わらずフォントが強制的に埋め込まれます。(マニュアル「5.3.3 Font Embedding」参照)

 出力されるPDFファイルのサイズを小さくするためにそのPDFファイルが使用しているフォントだけをPDFファイルに含むことができます。これをSubsettingといいます。Subsettingは、autosubsetting(subsettingを行うかどうかの指定)、subsetvalue(ここで指定したパーセント値を超えるフォントを使用している場合は、Subsettingを中止して全てのフォントを埋め込む)、及びsubsetminisize(ここで指定したサイズより小さなフォントのSubsettingは行わない)といったパラメータの指定により制御します。

エンコーディング

 マニュアルでは、「文字列中のバイト列がどのようにPDFlibやAcrobatで解釈され、ページ上のテキストに翻訳されるかを規定するもの」を「エンコーディング」としています。サポートされている複数のエンコーディングをドキュメント上で任意に使用することができます。特定のフォントでどのエンコーディングを適用できるかはフォントにより違いますので留意する必要があります。

個々のグリフ(字形)を特定するには以下の3種類の方法があります。

  1. グリフの名前による (PostScript Type1フォント)
  2. Unicodeによる (TrueType、OpenTypeフォント)
  3. CID(Character ID)による (CJKフォント)
 これらの方法は固定的に適用されるわけではなく、たとえばTrueTypeフォントは互換性のためにPostScriptのグリフ名を補助的に持つこともできます。

8ビットエンコーディング

 PDFlibで使用される8ビットエンコーディングはグリフ名及びUnicodeに基づいています。8ビットエンコーディングには既定のエンコーディング(マニュアル「5.2 Font Format Details」参照)、ユーザ定義エンコーディングなどがあります。

マルチバイトエンコーディング

 漢字を含むマルチバイト文字を指定するための以下のようなエンコーディングがあります。

  • Unicodeべース (「unicode」でエンコーディングを指定し、UTF-8、UTF-16などで文字列を指定します。)
  • CMapベース (標準CJKフォントに使用します。)
  • グリフIDベース (TrueType、OpenTypeでは「glyphid」でエンコーディングを指定し、直接グリフを指定することができます。)


(Nov 10, 2006)