PDFXrefStreamParser
PDFXrefStreamParserは、Apache PDFBoxにおいてPDFドキュメントのクロスリファレンスストリームを解析する専門的なコンポーネントです。
PDFXrefStreamParserは、Apache PDFBoxにおいてPDFドキュメントのクロスリファレンスストリームを解析する専門的なコンポーネントです。クロスリファレンスストリームは、従来のクロスリファレンステーブルに代わる圧縮された形式で、PDF 1.5で導入されました。オブジェクトの位置情報をより効率的に保存するためのものです。これらのストリームは ( 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オブジェクトへのランダムアクセスを可能にします。
PDFXrefStreamParserは、Apache PDFBoxの低レベルPDF読み取りインフラストラクチャ内部にあるパーサークラスで、クロスリファレンスストリームオブジェクト(XRefストリーム)を解釈します。ASCII形式のテキストを使用する従来のクロスリファレンステーブルとは異なり、クロスリファレンスストリームは同じ位置データをストリームオブジェクトを使用した圧縮バイナリ形式で保存します。このパーサーはこれらの圧縮ストリームを読み取り、必要に応じて展開し、オブジェクト番号とPDFファイル内の物理的位置とのマッピングを抽出します。このクラスは、短い説明で言及されているPDModel APIよりも低レベルで動作します。実際には、より高レベルのAPIが機能するための基盤となるPDF解析の一部です。PDFXrefStreamParserは特に、XRefストリーム辞書と関連する圧縮データのデコードを処理し、PDF仕様で定義されているW(幅)配列とIndex配列の仕様に従ってエントリを解釈します。
PDFファイルを扱う開発者にとって、PDFXrefStreamParserの役割を理解することは、PDF解析の問題をデバッグしたり、PDFファイル処理を最適化したりする際に重要です。最近のPDFファイルは、従来のテーブルの代わりにクロスリファレンスストリームを使用することが増えています。これは、特に多くのオブジェクトを持つPDFにおいて、ファイルサイズを大幅に削減するためです。PDFBoxがPDFファイルの読み取りでエラーに遭遇する場合、特に異なるPDFジェネレータによって作成されたファイルや線形化PDFにおいては、その問題はしばしば不正または非標準のクロスリファレンスストリームに起因します。PDFBox機能を拡張する開発者、カスタムPDFリーダーを実装する開発者、または破損したPDFファイルのトラブルシューティングを行う開発者は、このパーサーが3種類のXRefストリームエントリをどのように解釈するかを理解する必要があります:空きオブジェクト(タイプ0)、非圧縮オブジェクト(タイプ1)、オブジェクトストリーム内の圧縮オブジェクト(タイプ2)です。また、クロスリファレンスストリームの解析はPDFドキュメントを開いてナビゲートする速度に影響するため、パフォーマンスの考慮も重要です。
PDFXrefStreamParserは、まずクロスリファレンスストリームオブジェクトを見つけることから動作します。これは通常、PDFファイルの末尾、または増分更新の/Prevエントリが示す位置にあります。パーサーはストリームの辞書エントリ、特に各フィールド(タイプ、第一値、第二値)のバイト幅を指定する/W配列と、カバーされるオブジェクト番号の範囲を定義する/Index配列を読み取ります。次に、 ( 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 ) で指定されているように、/FlateDecodeなどのフィルタが適用されている場合、ストリームデータを展開します。展開されたデータは一連のエントリとして解釈され、各エントリには/W配列の仕様に一致するサイズのフィールドが含まれています。タイプ1エントリは、バイトオフセットと世代番号を保存することで非圧縮オブジェクトを指します。タイプ2エントリは、オブジェクトストリーム番号とそのストリーム内のインデックスを保存することで圧縮オブジェクトを参照します。パーサーは、PDFBoxがドキュメントのライフサイクル全体を通じてオンデマンドで任意のオブジェクトを見つけて取得するために使用する内部クロスリファレンステーブルをメモリ内に構築します。複数のクロスリファレンスストリームを持つPDFドキュメント(増分更新による)の場合、パーサーはそれらを順次処理し、同じオブジェクト番号については後のエントリが前のエントリを上書きします。
- Cross-Reference Table(クロスリファレンステーブル) – PDFファイルにおけるオブジェクト位置を保存するための従来のASCIIベースの形式で、クロスリファレンスストリームより前のもの
- Object Stream(オブジェクトストリーム) – 複数の圧縮されたPDFオブジェクトを含むPDFストリームで、クロスリファレンスストリームのタイプ2エントリによって参照される
- PDFParser – PDFファイルの読み取りを調整し、PDFXrefStreamParserのような専門化されたパーサーに委譲する、Apache PDFBoxのメインパーサークラス
- COSDocument – PDFXrefStreamParserが入力するPDFドキュメントのオブジェクト構造の低レベルApache PDFBox表現
- Linearized PDF(線形化PDF) – Web配信用に最適化された特別な構造の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
