Object stream
Object streamは、PDF 1.5で導入された特殊なタイプのstreamオブジェクトで、複数のindirect objectを単一の圧縮されたstream内にまとめて格納することを可能にします。
Object streamは、PDF 1.5で導入された特殊なタイプのstreamオブジェクトで、複数のindirect objectを単一の圧縮されたstream内にまとめて格納することを可能にします ( 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ファイル全体に個別に格納するのではなく、圧縮されたコレクションとしてグループ化することで、ファイルサイズを大幅に削減します。Object streamは、現代のPDF仕様における最も効果的な容量削減機能の一つです。
Object streamは、/Type値が/ObjStmのstreamオブジェクトで、圧縮形式でエンコードされた一連のindirect objectを含みます。PDFボディ内に個別に現れる通常のindirect objectとは異なり、object stream内のオブジェクトは連続して格納され、一つの単位として圧縮されます。各object streamは、インデックスを構成する一連の整数ペア(オブジェクト番号とバイトオフセット)から始まり、その後にシリアル化されたオブジェクトデータが続きます。内部に格納されるオブジェクト自体はstreamになることはできず、暗号化辞書などの特定のオブジェクトはobject stream内への格納が明示的に禁止されています
(
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
)
。Object streamは、相互参照情報を格納するcross-reference stream、およびページコンテンツとグラフィック演算子を含む通常のcontent streamとは根本的に異なります。
PDF生成、解析、または最適化に携わる開発者にとって、object streamの理解はいくつかの理由から重要です。第一に、object streamは非圧縮形式と比較してPDFファイルサイズを20〜40%削減できるため、帯域幅やストレージが制限されるアプリケーションにとって不可欠です。第二に、現代的なドキュメントを対象とするPDFパーサーは、大部分の構造オブジェクトにアクセスするためにobject streamの解凍を処理する必要があります。第三に、インクリメンタル更新やPDF操作ツールを実装する際、開発者はstream内のオブジェクトを個別に更新できないという事実を考慮する必要があります—stream全体を置き換える必要があります。最後に、object streamはランダムアクセスのパフォーマンスに影響を与えます:圧縮率は向上しますが、単一のオブジェクトにアクセスするにはstream全体を解凍する必要があるため、PDFリーダーやプロセッサのパフォーマンス特性に影響を与えます。
Object streamは、複数のオブジェクトを単一の圧縮単位にシリアル化するコンテナとして機能します。Stream辞書には、格納されているオブジェクトの数を示す/Nエントリと、実際のオブジェクトデータが始まるバイトオフセットを示す/Firstエントリが含まれます。Streamコンテンツは、N組の整数ペア(オブジェクト番号とオブジェクトデータセクション内の相対バイトオフセット)から始まります。このインデックスに続いて、従来の「obj」および「endobj」キーワードなしで、オブジェクト自体が順番に現れます。PDFリーダーがobject stream内のオブジェクトを指すindirect referenceに遭遇すると、まずstream全体を解凍し、インデックスを解析して対象オブジェクトの位置を特定し、その特定のオブジェクトを抽出して解析する必要があります。Object streamは通常Flate圧縮を使用し、他のobject stream内のオブジェクトを参照することもできますが、循環参照は禁止されています。PDF相互参照テーブルまたはcross-reference streamは、特別なエントリタイプを使用して、どのオブジェクトがobject stream内に格納されているかを示します。このエントリタイプは、包含するstreamとstream内のオブジェクトのインデックスを指します
(
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
)
。
- Cross-reference stream – オブジェクト番号をその位置にマッピングする相互参照情報を含む圧縮されたstream
- Indirect object – PDFファイル内の他の場所から参照できる番号付きオブジェクト
- Flate compression – PDFドキュメントのstreamに使用される主要な圧縮アルゴリズム
- Incremental update – ファイル全体を書き換えるのではなく、変更を追加することでPDFを修正する方法
- Stream object – stream/endstreamキーワード間のバイナリまたはテキストデータが続く辞書で構成されるPDFオブジェクト
- (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
