Stream dictionary
Stream dictionaryとは、PDFのstreamオブジェクトを構成する辞書部分であり、streamデータの解釈方法を記述するメタデータとパラメータを含みます。
Stream dictionaryとは、PDFの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
)
。PDFファイル内のすべてのstreamオブジェクトは2つの部分で構成されています。辞書の後にstreamとendstreamキーワードで囲まれた実際のバイナリデータが続きます。Stream dictionaryには、streamデータの長さ、適用される圧縮やエンコーディングフィルタ、データのデコードに必要なパラメータなどの重要な情報が指定されます。
Stream dictionaryは、streamオブジェクト内の生のバイト列の前に配置される標準的なPDF辞書オブジェクトです。PDFの独立した辞書とは異なり、stream dictionaryは直後に続くバイナリデータを記述するという特定の目的を持ちます。この辞書には、少なくともstreamとendstreamキーワード間のバイト数を指定する/Lengthエントリが含まれている必要があります。さらに、/Filter(FlateDecodeやDCTDecodeなどの圧縮またはエンコーディング方式を指定)、/DecodeParms(フィルタのパラメータを提供)、およびstreamの用途に応じたその他のstream固有のキー(画像streamの場合は/Widthや/Heightなど)を含むことができます。
Stream dictionaryはstreamデータそのものとは区別されます。辞書はキーと値のペアを持つPDFのテキストベース構文で記述されますが、その後に続くstreamデータはバイナリバイトで構成されます。この分離により、PDFプロセッサは実際のデータを処理する前にstreamに関するメタデータを読み取ることができます。
Stream dictionaryの理解は、PDFの操作、作成、または解析を行う開発者にとって不可欠です。Stream dictionaryは、PDF内に埋め込まれたバイナリデータをどのようにデコードして解釈するかをコードに正確に伝えます。/Filterと/DecodeParmsエントリを正しく読み取らなければ、streamコンテンツを解凍またはデコードすることはできません。プログラムでPDFを作成する際には、正確な/Length値と適切なフィルタ指定を持つ有効なstream dictionaryを構築する必要があります。そうでなければ、生成されるPDFは不正な形式となり、PDFビューアで読み取れなくなります。
Stream dictionaryは、PDFの問題のデバッグにも不可欠です。不正なフィルタパラメータや長さの不一致は、PDF破損の一般的な原因となります。PDFアクセシビリティ機能を実装する開発者にとって、content stream内のstream dictionaryには、PDF/UAなどの標準に従った文書構造を定義するマークされたコンテンツへの参照が含まれています ( Citation: N.A., 2014 (N.A.). (2014). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) . International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html ) 。
PDFファイル内のstreamオブジェクトは、次のような構造に従います。
<< /Length 534 /Filter /FlateDecode >>
stream
[バイナリデータ]
endstream
辞書部分(<< /Length 534 /Filter /FlateDecode >>)がstream dictionaryです。PDFプロセッサがこのオブジェクトに遭遇すると、まず辞書を解析して重要な情報を抽出します。/Lengthエントリは、streamとendstreamの間で読み取るバイト数をプロセッサに伝えます。/Filterエントリは、データがFlate(zlib)アルゴリズムを使用して圧縮されており、使用前に解凍する必要があることを示します。
複数のフィルタを持つstreamの場合、/Filterエントリは配列にすることができ、フィルタはリストされた順序で適用されます。/DecodeParmsエントリは、各フィルタに対応するパラメータ辞書の配列を提供します。たとえば、画像streamには次のようなものがあります。
<< /Length 2000 /Filter /DCTDecode /Width 800 /Height 600 /BitsPerComponent 8 >>
これは、streamにJPEG圧縮された画像データが特定の寸法で含まれていることをプロセッサに伝えます。Stream dictionaryはPDFのオブジェクト参照システムと統合されています。/Length値は別のオブジェクトへの間接参照にすることができ、ファイルの別の場所で長さを指定できます(PDFを段階的に生成する場合に便利です)。
- Stream object – Stream dictionaryと関連するバイナリデータで構成される完全なPDFオブジェクト
- Filter – Streamデータを変換するstream dictionaryで指定されるエンコーディングまたは圧縮方式
- Content stream – ページコンテンツをレンダリングするためのグラフィックス演算子と命令を含む特定のタイプのstreamオブジェクト
- Dictionary object – キーと値のペアを含む一般的なPDFデータ構造。Stream dictionaryはこの特殊化された型
- Decode parameters – フィルタがデータを処理する方法を制御するstream dictionaryのDecodeParmsエントリで指定される追加パラメータ
- (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
- (N.A.) (2014)
- (N.A.). (2014). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) . International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html
