PDFツールはそれぞれ、自身の要件に最適なバランスを見つける方法を選ぶ必要があります。例えば、Xpdfは通常CMYKを扱う際に数式を使用するため、プロファイルを利用するAdobe Acrobatと比較して、黒や白の色合いが違って見えることがあります。
色を変換する上で最も正確な方法は、プロファイルの使用です。私たちがJava PDFビューアのカラー処理コードを開発した際には、PDFファイルの全ての色をJavaで扱えるsRGBに変換する必要がありました。できる限り、Adobe Acrobatの処理に近いプロファイルを使用することが望ましいです。
PDF ファイルでは、テキストはどのように保存されるのですか?
PDFファイルでは、テキストはフォントオブジェクトと一連のTJコマンドによって定義されます。ですから、コマンド・ストリームには次のようなものがあります。
| Tf (Text font) コマンド | 目的: | テキストのフォントとサイズを設定します。 |
| 構文例: | /フォント名 サイズ Tf. 例えば、/F1 12 Tfは、フォントF1をサイズ12で使用することを指定します。 | |
| F1 | 特定のフォントを指示するために使用される識別子です。PDF内でフォントリソースに名前を割り当てる際に使用され、Tfコマンドで参照されます。 | |
| TJ (Text show) コマンド | 目的: | テキスト文字列をPDFページに表示します。文字間隔を微調整するために配列を使用できます。 |
| 構文例: | (文字列) -間隔 (文字列) ... ] TJ. 例えば、[[こんにちは、) -120 (世界!)] TJは、「こんにちは」と「世界!」の間に特定の文字間隔を設定します | |
Tfコマンドは、リソースオブジェクト内でF1として定義された特定のフォントオブジェクトの使用を指示します。このフォントオブジェクトはフォントの名前、グリフの幅、エンコーディングなどの詳細を含みます。
一方、TJコマンドは使用するグリフの番号を列挙します。 これは単なるテキスト値ではなく、グリフを識別するインデックスを含んでいます。 多くの場合、特にWINエンコーディングを使用している場合、これらの値はASCII値と一致することがありますが、必ずしもそうではありません。そのため、解釈する際はフォントの特定のエンコーディングを考慮に入れる必要があります。
フォントのエンコーディングオブジェクトは、特定の値を文字に変換する方法を指定します。これはPDFリファレンス仕様の付録Dで定義されており、また、独自のカスタムエンコーディングを/Differencesオブジェクトを使って作成することも可能です。さらに、テキスト抽出用に異なるUnicode値を指定することもできます。これは特に、画面上では1文字として表示されるが抽出時には2文字として扱いたい合字 (例: fl) の場合に便利です。
一般的に、テキスト抽出時にはUnicode値が使用されます。