編集可能な診断ドキュメントと修復

SaveLoadedDocumentDiagnostic は、検査と制御されたテキスト編集のための決定的で展開された出力を生成し、RepairDiagnosticDocument は編集されたファイルを構造的に有効な PDF に戻します

往復ワークフロー

  1. ドキュメントをロードし、SaveLoadedDocumentDiagnostic を呼び出します
  2. オブジェクト辞書または非圧縮ストリームバイトを編集します。/Length、xref 行、startxref を手動で維持しようとしないでください
  3. 境界付きオプションで RepairDiagnosticDocument を呼び出します
  4. THPDFDiagnosticRepairReport を検査し、メソッドが True を返した場合のみ修復済みターゲットを使用します

修復コントラクト

厳格な拒否

修復は、重複オブジェクト番号、複数または欠落した Catalog オブジェクト、壊れた trailer 参照、オブジェクト間の非コメントバイト、無効なオブジェクト文法、オブジェクトまたは入力の制限、10 桁を超える古典的な xref オフセット、厳格な再ロード検証失敗に対して閉方向に失敗します

検証済みオブジェクト内のマーカーはスキップされるため、文字列やエンコード済みストリームペイロード内のオブジェクト風テキストは xref エントリになりません

境界付きパフォーマンス

スキャナーは短いキャリー付きで 1 MiB ウィンドウを読み取り、オブジェクト範囲をファイルストリーム間で直接コピーし、検証済みオブジェクトメタデータと境界付き辞書プローブのみを保持します

MaxInputBytes、MaxObjectCount、MaxObjectNumber は、出力が公開される前にスキャン、保持メタデータ、出力 xref 行を制限します

Pascal の例

var
  Options: THPDFDiagnosticRepairOptions;
  Report: THPDFDiagnosticRepairReport;
begin
  Options := THPDFDiagnosticRepairOptions.Default;
  Options.MaxInputBytes := Int64(16) * 1024 * 1024 * 1024;

  if not THotPDF.RepairDiagnosticDocument(
    'edited-diagnostic.pdf',
    'repaired.pdf',
    Options,
    Report
  ) then
    raise Exception.Create(string(Report.Diagnostic));
end;

関連 API