Indirect object
Indirect objectは、PDF ファイル構造の基本的な構成要素であり、コンテンツを一度保存して文書全体で複数回参照できるようにします。
Indirect objectは、PDF ファイル構造の基本的な構成要素であり、コンテンツを一度保存して文書全体で複数回参照できるようにします。 ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) で定義されているように、各indirect objectには一意のオブジェクト番号と世代番号が割り当てられ、データを複製することなくPDFの他の部分から参照できます。このメカニズムは、ファイルサイズを最小化し、文書コンテンツへのランダムアクセスを可能にする、効率的で適切に構造化されたPDFファイルを作成するために不可欠です。
Indirect objectとは、オブジェクト番号と世代番号でラベル付けされた任意のPDFオブジェクト(辞書、ストリーム、配列、または単純な値など)であり、PDFファイル本体内で独立してアドレス指定可能になります。オブジェクトはn g obj ... endobjという構文を使用して定義されます。ここで、nはオブジェクト番号、gは世代番号(更新されたことのないオブジェクトの場合は通常0)であり、コンテンツはobjとendobjキーワードの間に記述されます。
Indirect objectとdirect objectには重要な違いがあります。Direct objectは使用される場所にインラインで埋め込まれますが、indirect objectはPDF本体に別途保存され、n g Rという構文を使用してオブジェクト番号と世代番号で参照されます。この間接参照により、同じオブジェクトをコンテンツを複製することなく複数の場所から参照できます。
(
Citation: N.A., 2020
(N.A.).
(2020).
Document management — Portable document format — Part 2: PDF 2.0
.
International Organization for Standardization
Retrieved from
https://www.iso.org/standard/75839.html
)
によれば、これは文書全体で繰り返し使用される可能性のあるフォント、画像、ページオブジェクトなどのリソースにとって特に重要です。
PDF生成または操作を行う開発者にとって、indirect objectを理解することは以下の理由から重要です。
ファイル効率: Indirect objectを使用することで、共通リソースの重複を防ぎます。例えば、すべてのページで使用されるロゴ画像は、各ページにdirect objectとして埋め込むのではなく、indirect objectとして一度だけ保存すればよく、ファイルサイズを大幅に削減できます。
文書構造: ページツリー、フォント辞書、コンテンツストリームを含むPDFの論理構造は、すべてindirect objectに依存しています。開発者は、プログラムでPDFを生成したり既存のPDFを変更したりする際に、これらのオブジェクトを正しく作成して参照する必要があります。
相互参照: 相互参照テーブル(またはクロスリファレンスストリーム)は、ファイル内のすべてのindirect objectのバイトオフセットを追跡し、PDFリーダーがファイル全体を解析することなく特定のオブジェクトを素早く特定して読み込めるようにします。これは大きな文書を扱う際のパフォーマンスに不可欠です。
インクリメンタル更新: 世代番号により、PDFファイル全体を書き直すことなくインクリメンタルに更新できます。オブジェクトが変更されると、世代番号をインクリメントした新しいバージョンをファイルに追加できます。
PDF ファイル構造は、効率的な保存と取得を可能にする特定の方法でindirect objectを整理します。
オブジェクト定義: Indirect objectはPDF本体で次の構造で定義されます。
12 0 obj
<< /Type /Font
/Subtype /Type1
/BaseFont /Helvetica >>
endobj
ここでは、オブジェクト番号12、世代0に、フォント辞書が含まれています。
オブジェクト参照: PDFの他の部分は、12 0 Rという構文を使用してこのオブジェクトを参照します。例えば、ページのリソースには/Font << /F1 12 0 R >>が含まれ、フォントF1が上記で定義されたオブジェクトを参照することを示します。
相互参照の追跡: 相互参照テーブル(または最新のPDFではストリーム)は、各indirect objectのエントリを維持し、ファイルの先頭からのバイトオフセットを記録します。これにより、PDFリーダーは順次スキャンなしで任意のオブジェクトに直接ジャンプできます。
世代番号: 世代番号は新しいオブジェクトでは0から始まり、インクリメンタル保存でオブジェクトが更新されるとインクリメントされます。オブジェクトが削除されると、相互参照テーブル内のエントリは空きとしてマークされ、新しいオブジェクトに再利用できます。世代番号は再利用回数を示します。
特殊なオブジェクト: 特定のindirect objectはPDF構造内で特別な意味を持ちます。カタログ辞書(トレーラーから参照される)は文書階層のルートとして機能し、ページツリーは文書のページを整理し、さまざまなリソース辞書はコンテンツストリームが参照するフォント、画像、グラフィックス状態を定義します。
- Direct object – オブジェクト番号で別途保存されるのではなく、使用場所にインラインで埋め込まれるPDFオブジェクト
- Cross-reference table – 各indirect objectのオブジェクト番号をPDFファイル内のバイトオフセットにマッピングするインデックス
- Object stream – ファイルサイズを削減するために複数の圧縮されたindirect objectを含むことができる特殊なストリームオブジェクト
- Document catalog – トレーラー辞書から参照される、PDF文書階層のルートとなるindirect object
- Generation number – オブジェクトの更新と再利用を追跡するために使用される、indirect objectの識別子の第2コンポーネント
- (N.A.) (2020)
- (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
