Stream object
Stream objectは、辞書と生のバイナリデータを組み合わせたPDFの基本的なデータ構造であり、ページ記述、画像、フォント、メタデータなどの大量のコンテンツを効率的に格納できます。
Stream 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
)
で定義されているように、stream objectは辞書と、streamとendstreamというキーワードで囲まれたバイトシーケンスで構成されます。この構造により、PDFファイルは単一の統合されたオブジェクト内にデータに関するメタデータと実際のデータペイロードの両方を含めることができます。
Stream objectはPDFの基本的なオブジェクトタイプの1つであり、辞書、配列、単純な値などの他のオブジェクトとは異なります。2つの部分で構成されています。メタデータを含む辞書オブジェクト(stream dictionaryと呼ばれる)と、streamキーワードの直後に続くバイトシーケンス(stream data)です。Stream dictionaryには、stream data内のバイト数を指定する/Lengthエントリが必須であり、データに適用された圧縮またはエンコーディングを示す/Filterなどの追加エントリを含めることができます。
キーと値のペアのみを含む単純な辞書オブジェクトとは異なり、stream objectは任意のバイナリデータを保持できるため、大規模または複雑なコンテンツの格納に適しています。Stream dataは辞書とは別ですが、本質的に辞書とリンクしています。辞書は後に続くバイトをどのように解釈するかを記述します。Stream objectはPDFファイル内で常に間接オブジェクトであり、オブジェクト番号と世代番号を持つ必要があります。
PDFの生成、解析、操作を行う開発者にとって、stream objectの理解は不可欠です。なぜなら、stream objectにはPDFドキュメントの実際に表示される機能的なコンテンツが含まれているからです。Page content streamは、PDFオペレーターとオペランドを通じて各ページに表示される内容を定義します。画像データ、フォントプログラム、埋め込みファイルはすべてstreamとして格納されます。プログラムでPDFを作成または変更する際、開発者は適切なフィルターとパラメーターを使用してstream dictionaryを正しく構築し、stream dataを適切にエンコードする必要があります。
Stream objectはPDFファイルサイズと処理パフォーマンスにも大きな影響を与えます。適切な圧縮フィルター(/FlateDecodeなど)を選択することで、ファイルサイズを劇的に削減できます。一方、不適切な処理は、コンテンツの破損やアクセシビリティの問題を引き起こす可能性があります。これは、
(
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
)
のような標準において特に重要です。これらの標準では、支援技術のためにcontent streamを適切に構造化する必要があります。
Stream objectは、プロパティを定義する辞書で始まり、続いてstreamキーワード、実際のバイトデータ、endstreamキーワードが続きます。基本的な構文は次のようになります。
7 0 obj
<<
/Length 534
/Filter /FlateDecode
>>
stream
[binary data bytes]
endstream
endobj
Stream dictionaryの/Lengthエントリは必須であり、streamとendstreamの間に存在するバイト数を正確に指定します。/Filterエントリが存在する場合、stream dataがエンコードまたは圧縮されていることを示します。一般的なフィルターには、/FlateDecode(zlib/deflate圧縮)、/DCTDecode(JPEG圧縮)、/ASCIIHexDecodeがあります。複数のフィルターを順次適用することができ、配列として指定されます。
(
Citation: PDF Association, 2023
PDF Association(2023). Retrieved from
https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/
)
で参照されているページコンテンツを記述するcontent streamには、PDFオペレーターとそのオペランドのシーケンスが含まれています。これらのオペレーターは、グラフィックス状態を制御し、パスを描画し、テキストを配置し、外部リソースを参照します。その他のstreamタイプには、image XObject(ピクセルデータを含む)、フォントファイル(フォントプログラムを含む)、metadata stream(XMPデータを含む)があります。Stream dictionaryの/Typeと/Subtypeエントリは、多くの場合、streamの特定の目的を識別します。
- Dictionary object – Stream objectの最初の部分を形成するキーと値のデータ構造
- Content stream – ページコンテンツを記述するオペレーターを含む特定のタイプのstream object
- Filter – Stream dictionaryで指定される、stream dataに適用されるエンコーディングまたは圧縮アルゴリズム
- Indirect object – ファイル内の他の場所から参照できる番号付きPDFオブジェクト。すべてのstream objectはこれである必要がある
- XObject – 画像やフォームなど、streamとして格納される再利用可能な外部オブジェクト
- (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 Association (2023)
- PDF Association(2023). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/
- (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
