PDFium Delphi Component Docs

LoadDocument のポリシーと修復出力

コンポーネント: TPdf  ·  ユニット: PDFium
互換、厳格、復元のいずれかのポリシーで PDF を開き、必要に応じて独立に検証された修復コピーを書き出します

構文

procedure LoadDocument;

 

procedure LoadDocument(Data: Pointer; Size: NativeUInt; Buffered: Boolean = True);

DataPointer。メモリ上の生の PDF データへのポインタです
SizeNativeUInt。データバッファのサイズ (バイト単位) です
BufferedBoolean。True (既定) の場合、TPdf は独自のコピーを保持します。False の場合、ドキュメントがアンロードされるまでバッファは有効なまま残らなければなりません

 

procedure LoadDocument(const Data: TBytes; Buffered: Boolean = True);

DataTBytes。バイト配列としての PDF ファイルの内容です
BufferedBoolean。True (既定) の場合、TPdf は独自のコピーを保持します。False の場合、ドキュメントがアンロードされるまでバイト配列は有効かつ unchanged のまま残らなければなりません

 

procedure LoadDocument(const Data: TBytes; Index, Count: Integer; Buffered: Boolean = True);

DataTBytes。PDF ウィンドウを含むバッキングバイト配列です
IndexInteger。最初の PDF バイトの 0 始まりオフセットです
CountInteger。読み込む PDF バイト数です
BufferedBoolean。True (既定) の場合、TPdf は選択されたウィンドウのみをコピーします。False の場合、ドキュメントがアンロードされるまでバッキングバイト配列は有効かつ unchanged のまま残らなければなりません

 

procedure LoadDocument(Data: TMemoryStream; Buffered: Boolean = True);

DataTMemoryStream。PDF データを含む TMemoryStream です
BufferedBoolean。True (既定) の場合、TPdf は独自のコピーを保持します。False の場合、ドキュメントがアンロードされるまでストリームメモリは有効なまま残らなければなりません

 

procedure LoadDocument(const Options: TPdfLoadOptions; out Report: TPdfLoadReport);

procedure LoadDocument(Data: Pointer; Size: NativeUInt; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);

procedure LoadDocument(const Data: TBytes; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);

procedure LoadDocument(const Data: TBytes; Index, Count: Integer; const Options: TPdfLoadOptions; out Report: TPdfLoadReport; Buffered: Boolean = True);

 

function SaveAsRepaired(Stream: TStream; out Report: TPdfRepairReport; AllowSignedDocument: Boolean = False): Boolean;

function SaveAsRepaired(const FileName: string; out Report: TPdfRepairReport; AllowSignedDocument: Boolean = False): Boolean;

説明

レガシーのオーバーロードは互換モードを使用し、LastLoadReport を通じてネイティブの xref 有効性と復元ステータスを公開しながら、既存の動作を保持します。引数なしのオーバーロードは FileName に保存されたパスから読み込みます。Pointer、TBytes、 TMemoryStream の各オーバーロードはファイルシステムを経由せず、メモリ上のデータから直接読み込みます。バイト範囲オーバーロードは、一時的な TBytes スライスを作成することなく、より大きなコンテナ、プロトコルフレーム、または再利用される受信バッファから 埋め込み PDF を選択します

Buffered が True (既定) の場合、TPdf は 指定されたバイトを保持バッファへコピーします。False の場合、呼び出し側の バッファは UnloadDocument または Active := False まで有効かつ unchanged のまま残らなければなりません。これは余分なコピーを避けられますが、注意深い 生存期間の管理が必要です

バイト範囲オーバーロードは、負の値、データ長を超える Index、残りのバイトを超える Count を拒否します。ポインタオーバーロードは Size が非ゼロの場合に nil を拒否し、TMemoryStream オーバーロードはドキュメント状態を変更する前に nil ストリームを拒否します

成功すると、Active が True になり、すべてのページプロパティは 最初のページ (PageNumber = 1) を反映します。失敗すると EPdfError 例外が発生します

読み込みポリシー

TPdfLoadOptions.Default は、ソースバイト、問題、xref セクション、xref エントリ、オブジェクト番号に対する上限付きの既定値を提供します。どのモードでも PDFium がセマンティックパーサーであり続けます。ラッパー監査が存在するのは、公開されている PDFium ABI が xref の有効性を報告するものの、パーサーの復元を無効化するスイッチを公開していないためです

監査は古典的な xref テーブル、xref ストリーム、ハイブリッドリビジョン、/Prev チェーンを辿ります。不正なセクション、サイクル、競合するエントリ、破損したオブジェクトオフセット、欠落している終端マーカー、サポートされないストリームフィルタ、予算の枯渇、ネイティブの復元を報告します。構成された監査予算を超えた場合は AuditComplete が False に設定され警告が生成されます。それ自体が未検査のバイトを無効と主張するわけではありません

InspectAvailability は、線形化やページ優先読み込みのための軽量なネイティブ可用性プローブであり続けます。構造的な読み込みレポートの代わりにはなりません

レポート

TPdfLoadReport には、Status、CrossReferenceTableValid、UsedRecovery、RecoveryRoute、ソースと構造のオフセット、セクションとエントリのカウンタ、競合と破損のカウンタ、問題の合計、切り詰め状態、および型付きの Issues 配列が含まれます。同じレポートが LastLoadReport に保存されます

TPdfRepairReport は、ソースが復元を使用したかどうか、出力サイズとページ数、出力の xref 有効性、終端のエラーテキスト、および完全な独立厳格読み込み検証レポートを記録します

修復出力

SaveAsRepaired は、PDFium に完全な非インクリメンタルコピーを書き出させ、その出力を隔離された TPdf で plmStrict を使って開きます。このメソッドは、xref の有効性とページ数の一貫性が通過した後にのみバイトを渡します。ファイルオーバーロードは同じディレクトリの一時ファイルを通じて書き込み、移動先をアトミックに置き換えます

完全な再書き込みは、それまでのインクリメンタル履歴を取り除き、既存の署名バイト範囲を無効化します。署名されたドキュメントは、AllowSignedDocument が明示的に True でない限り拒否されます。このメソッドが修復するのは、PDFium が正常に読み込んで再書き込みできる構造です。任意の破損コンテンツの復元やデジタル署名の保持を保証するものではありません

例

// From file
Pdf.FileName := 'C:\docs\file.pdf';
Pdf.LoadDocument;

// From TBytes
var Bytes: TBytes;
Bytes := TFile.ReadAllBytes('file.pdf');
Pdf.LoadDocument(Bytes);

// From a PDF embedded in a larger byte array
Pdf.LoadDocument(Container, PdfOffset, PdfLength);

// From TMemoryStream (unbuffered)
Pdf.LoadDocument(FStream, False);

// Reject hidden parser recovery
Options := TPdfLoadOptions.Default(plmStrict);
Pdf.LoadDocument(Options, Report);

// Rewrite and independently verify a recovered document
Pdf.SaveAsRepaired('C:\docs\repaired.pdf', RepairReport);

関連項目

Active, FileName, LoadCustomDocument, SaveAs