可編輯診斷文件與修復

SaveLoadedDocumentDiagnostic 產生確定性、未壓縮的輸出供檢查與受控的文字編輯,而 RepairDiagnosticDocument 則把編輯過的文件轉回結構上有效的 PDF

往返工作流程

  1. 載入文件並呼叫 SaveLoadedDocumentDiagnostic
  2. 編輯物件字典或未壓縮的串流位元組,而無須手動維護 /Length、xref 列或 startxref
  3. 以有界的選項呼叫 RepairDiagnosticDocument
  4. 檢查 THPDFDiagnosticRepairReport,並只在方法傳回 True 時使用修復後的目標

修復契約

嚴格拒絕

對於重複的物件編號、多個或缺失的 Catalog 物件、中斷的尾隨參照、物件之間的註解外位元組、無效的物件文法、物件或輸入限制、超過十位數的經典 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