PDFStreamParser
PDFStreamParserは、Apache PDFBoxライブラリに含まれるJavaクラスで、PDFコンテンツストリームへのプログラマティックなアクセスを開発者に提供します。
PDFStreamParserは、Apache PDFBoxライブラリに含まれるJavaクラスで、PDFコンテンツストリームへのプログラマティックなアクセスを開発者に提供します。このクラスは、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 ) に従って、テキスト、グラフィックス、その他の視覚要素がPDFページ上でどのようにレンダリングされるかを定義する低レベルのコンテンツストリームオペレーターとオペランドを解析します。このパーサーにより、開発者はPDFページコンテンツの基本的な構成要素を抽出、分析、操作できるようになります。
PDFStreamParserは、Apache PDFBoxのコンテンツストリーム処理APIの一部であり、PDFコンテンツストリームをオペレーターとそのオペランドを表すトークンのシーケンスに解析するために特別に設計されています。PDF要素への抽象化されたアクセスを提供する高レベルのPDFBoxクラスとは異なり、PDFStreamParserはコンテンツストリームレベルで動作し、ページレンダリング命令を定義するPostScript風の構文を解釈します。
このパーサーはコンテンツストリームを読み取り、走査、変更、分析が可能なオブジェクトとオペレーターのリストに変換します。テキストの配置、グラフィックス状態の管理、パスの構築、リソース参照のための様々なPDFオペレーターを処理します。これは、テキスト抽出のみに焦点を当てたPDFTextStripperや、既存のコンテンツを解析するのではなくコンテンツを書き込むために設計されたPDPageContentStreamといったクラスとは異なります。
PDF操作を行う開発者にとって、PDFStreamParserは高度なPDF処理タスクのための重要な機能を提供します。高レベルAPIだけでは実現できないPDFコンテンツの深い検査と変更を可能にします。これは、コンテンツ変換を必要とする複雑なPDF、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構造のフォレンジック分析を行う際に特に重要です。
PDFStreamParserの理解は、カスタムPDF処理ロジックの実装、PDFレンダリング問題のデバッグ、または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 ) で定義された生のPDF構文と、開発者がプログラマティックに制御できる実用的なJavaオブジェクトとの橋渡しとなります。
PDFStreamParserは、PDFコンテンツストリーム(通常はページのコンテンツストリームまたはForm XObjectから)を受け取り、オペランドとオペレーターの順序付きリストにトークン化することで動作します。解析プロセスは以下の主要なステップに従います:
初期化:パーサーは、解析が必要なPDStreamオブジェクトまたは生のコンテンツストリームデータでインスタンス化されます。
トークン化:パーサーはストリームをバイト単位で読み取り、PDF構文規則に従って数値、名前、文字列、配列、辞書、オペレーターなどのPDFトークンを識別します。
オブジェクト構築:トークンが識別されると、パーサーはPDFオブジェクト(COSNumber、COSName、COSStringなど)とオペレーターを表す適切なJavaオブジェクトを構築します。
トークンリスト生成:解析された要素は、元のレンダリングシーケンスを保持する順序でリストに追加されます。
走査と変更:開発者は解析されたトークンリストを反復処理して、コンテンツを分析したり、オペレーターやオペランドを変更したり、オペレータータイプに基づいて特定の情報を抽出したりできます。
パーサーは、トークン化の前にストリームを自動的に解凍することで、圧縮されたストリームを処理します。Tagged PDFコンテンツ ( Citation: PDF Association, 2023 PDF Association(2023). Retrieved from https://pdfa.org/resource/tagged-pdf-best-practice-guide-syntax/ ) を扱う際、PDFStreamParserはマークされたコンテンツシーケンスとそれに関連する構造要素を識別でき、アクセシビリティ関連の操作を可能にします。
- Content Stream(コンテンツストリーム) – ページまたはフォームの外観を記述するPDFオペレーターとオペランドのシーケンスを含むストリームオブジェクト
- PDPageContentStream – PDFページにコンテンツストリームを書き込むためのApache PDFBoxクラスで、PDFStreamParserの読み取り機能を補完します
- PDF Operators(PDFオペレーター) – グラフィックス操作、テキストレンダリング、状態変更を指定するPDFコンテンツストリーム内のコマンド
- COSObject – PDFBoxにおけるCarousel Object SystemレベルでのPDFオブジェクトを表す基底クラスで、PDFStreamParserが解析中に生成します
- Marked Content(マークされたコンテンツ) – アクセシビリティとTagged PDFサポートのために、コンテンツを構造要素と関連付ける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
- 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
