Cross-reference stream
Cross-reference streamは、PDF 1.5で導入されたメカニズムで、従来のプレーンテキスト形式のcross-reference tableではなく、圧縮されたstreamオブジェクト内にcross-reference情報を格納します。
Cross-reference streamは、PDF 1.5で導入されたメカニズムで、従来のプレーンテキスト形式のcross-reference tableではなく、圧縮されたstreamオブジェクト内にcross-reference情報を格納します。 ( 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文書において、より効率的なストレージとオブジェクト位置データへの高速アクセスが可能になります。Cross-reference streamは、圧縮効果を最大化するためにobject streamと組み合わせて使用されることがよくあります。
Cross-reference streamは、従来xrefテーブルに格納されていたcross-referenceデータと同じ内容を含む特殊なタイプのPDF streamオブジェクトですが、バイナリの圧縮形式で保存されます。各オブジェクトのバイトオフセットを人間が読めるASCIIテキストで記載する従来のcross-reference tableとは異なり、cross-reference streamはこの情報をバイナリデータとしてエンコードし、FlateDecodeなどの標準的なPDFフィルタを使用して圧縮できます。streamのdictionaryには、/Type /XRef、/Size、/W(エンコードされたデータのフィールド幅を定義)などの必須エントリと、どのオブジェクト番号がカバーされているかを指定する/Indexなどのオプションエントリが含まれます。Cross-reference streamは、従来のxrefテーブルとtrailer dictionaryの組み合わせを置き換え、
(
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
)
で規定されているように、trailer情報をstreamのdictionary内に直接組み込みます。
PDF生成、操作、または最適化に携わる開発者にとって、cross-reference streamの理解はいくつかの理由から不可欠です。第一に、圧縮によってファイルサイズを大幅に削減できます。これは大規模な文書を扱う場合や帯域幅が制限された環境で動作する場合に重要な考慮事項です。第二に、最新のPDFワークフローやPDF 2.0準拠のアプリケーションは、ファイル構造を整理するための推奨方法としてcross-reference streamにますます依存しています。第三に、incremental updateや文書修正機能を実装する際、開発者は文書の整合性を維持するためにcross-reference streamを正しく処理する必要があります。最後に、PDFリーダーやプロセッサーのパフォーマンス最適化は、cross-reference streamの効率的な解析に依存することが多いため、大規模なPDFファイル内の特定のオブジェクトに素早くアクセスする必要があるアプリケーションにとって重要です。
Cross-reference streamは、オブジェクトの位置情報を一連のバイナリエントリとしてエンコードします。各エントリには、オブジェクトのステータスと位置を記述する複数のフィールドが含まれています。streamのdictionary内の/W配列は、エントリ内の各フィールドのバイト幅を指定します。通常、エントリタイプ、第2フィールド(意味はタイプによって異なる)、第3フィールド(これもタイプに依存)を表す3つのフィールドがあります。Type 0エントリは空きオブジェクトを示し、Type 1エントリは非圧縮オブジェクトを指し(バイトオフセットと世代番号のフィールドを持つ)、Type 2エントリはobject stream内の圧縮オブジェクトを参照します(object stream番号とそのstream内のインデックスのフィールドを持つ)。streamデータ自体は/Index配列に従って編成されており、オブジェクト番号の範囲を指定します。指定がない場合は、デフォルトで0から/Size - 1までのすべてのオブジェクトをカバーします。PDFリーダーがcross-reference streamに遭遇すると、streamを解凍し、フィールド幅に従ってバイナリデータを解釈し、オブジェクト番号とその位置をマッピングする内部テーブルを構築します。これは基本的に従来のxrefテーブルを読み取るのと同じプロセスですが、プレーンテキストではなく圧縮されたバイナリデータを扱います。
- Cross-reference table – PDFファイル内のオブジェクト位置情報を格納するための従来のASCIIベースの形式で、PDF 1.5以前に使用されていました
- Object stream – PDF 1.5以降の機能で、複数のオブジェクトを圧縮されたstream内に格納します。cross-reference streamと併用されることが多いです
- Incremental update – ファイル全体を書き換えるのではなく変更を追加することでPDFファイルを修正する方法で、適切なcross-reference管理が必要です
- Trailer dictionary – PDFファイル構造に関するメタデータを含みます。cross-reference streamでは、この情報がstreamのdictionaryに組み込まれます
- Linearized PDF – Web表示用に最適化されたPDFファイル構造で、高速なページ表示のために特殊なcross-reference編成を使用します
- (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
