ヘッドレスクロスリファレンス

HPDFHeadlessXRef は、THPDFHeadlessDocument が使う検証済み xref ストリームとオブジェクトストリームのインデックス処理を供給します。ディクショナリーとオブジェクトストリームヘッダーは共有オブジェクトパーサーを使い、ビッグエンディアンのフィールドは共有 Direct File バイトリーダーを使います

HPDFHeadlessDecodeXRefRows(Dictionary, DecodedBytes, MaxObjects, CancellationToken) は、呼び出し側がフィルターと予測子をデコードした後、直接の Type、Size、W、省略可能な Index エントリーを読みます

THPDFHeadlessXRefRows は THPDFHeadlessXRefRow レコードの配列で、ObjectNumber と、Entry として共有の THPDFDirectXrefEntry を含みます。エントリー種別 0・1・2 は、フリー、直接、圧縮の各オブジェクトを識別します

幅は 0 から 8 バイトの範囲で、省略されたフィールドは PDF のデフォルトを使い、オフセットは Int64 精度を保ちます。サブセクションの重なり、ペイロード長の不一致、範囲外の世代、符号なしオーバーフローは、オブジェクトのインデックス化の前に拒否されます

HPDFHeadlessReadObjectStreamIndex(Dictionary, DecodedBytes, MaxObjects, MaxDecodedBytes, CancellationToken) は、直接の Type=ObjStm、N、First を検証してから、数値ヘッダーを共有パーサーで解析します

THPDFHeadlessObjectStreamMembers は THPDFHeadlessObjectStreamMember レコードの配列で、ObjectNumber、0 始まりのデコード済みペイロード Offset、正の Length を持ちます。重複オブジェクト番号、非整数ペア、無効なオフセット、設定済み予算超過は拒否されます

HPDFHeadlessObjectStreamBody(Members, DecodedBytes, MemberIndex, ExpectedObjectNumber) は、権威ある xref メンバー番号をコンテナーヘッダーと照合した後、正確なメンバースライスを返します。ドキュメント側の呼び出し元が、そのスライスを共有パーサーで解析します

EHPDFHeadlessXRefError はメッセージと読み取り専用の LimitExceeded フラグを報告し、キャンセルは EHPDFOperationCancelled を発生させます。ディクショナリーとデコード済みバッファーは呼び出し側が所有し、返される配列は値レコードを含みます

プロバイダーが扱うのはバイトのインデックス化と検証です。リビジョンの優先順位、ハイブリッド側セクションのマージ、フィルターデコード、復号、オブジェクトキャッシュ、ドキュメントの所有権は、ドキュメントローダーの担当のままです

正確な数値

共有パーサーは、Single への変換で値が丸まる場合や絶対値が 16777216 を超える場合に、元のソーストークンを保持します。クロスリファレンスとオブジェクトストリームの整数リーダーは、正確な Int64 オフセットとインデックスのためにそのトークンを優先し、小さな正確な整数は割り当て効率の良い経路を保ちます

テストは共有ライターと独立した圧縮オブジェクト PDF を使い、40 ビットオフセット、幅/デフォルト、予測子、スパース範囲、ハイブリッド優先順位、不正なメンバーインデックス、リビジョンサイクルをカバーし、元のパーサーの割り当てとスループットしきい値を保持します