PDFium Delphi Component 文件

SaveAsSanitised 方法

元件: TPdf  ·  單元: PDFium
透過有界的 catalog 與 trailer 更新寫出乾淨的單一修訂複本,然後修剪無法觸達的物件,讓孤立的 JavaScript、動作、附件與中繼資料本體從檔案主體中消失

Syntax

function SaveAsSanitised(Stream: TStream;
  const Options: TPdfSanitiseOptions;
  out Report: TPdfSanitiseReport): Boolean; overload;

function SaveAsSanitised(const FileName: string;
  const Options: TPdfSanitiseOptions;
  out Report: TPdfSanitiseReport): Boolean; overload;

Description

SaveAsSanitised 會產生淨化的單一修訂 PDF 複本,先從文件 catalog 移除作用中內容向量,接著可選擇執行可達性修剪,從檔案主體中消除孤立物件

兩階段管線先以遞增式更新透過 StripDictionaryEntries 剝除 catalog 項目(/OpenAction、/AA、/Names、/AF、/AcroForm、/Metadata),然後執行 PruneUnreachablePdfStream,把檔案改寫為單一乾淨的傳統修訂

catalog 與 trailer 更新在一般 xref 路徑上使用稀疏 xref 查找、不超過 1 MiB 的剖析器視窗,以及 64 KiB 的範圍複製,而不會把完整儲存的 PDF 具體化成單一位元組陣列

啟用修剪時,中繼工作區是由 SaveMemoryLimit 與 SaveTemporaryDirectory 管轄的 TPdfRandomAccessStore,其尖峰記憶體與溢流狀態會計入 LastSaveLargestMemoryBuffer 與 LastSaveSpillCount

每個剝除旗標都相互獨立。TPdfSanitiseOptions.Default 啟用完整的安全性設定檔:StripOpenAction、StripCatalogActions、StripNames、StripAssociatedFiles,加上 RemoveUnreachable 修剪。StripAcroForm 與 StripMetadata 預設為 False,因為它們會移除呼叫端可能想保留的表單欄位與中繼資料

當 RemoveUnreachable=True 時,輸出永遠是沒有遞增歷程的單一修訂

Parameters

Remarks

Example

var
  Options: TPdfSanitiseOptions;
  Report: TPdfSanitiseReport;
begin
  Pdf1.FileName := 'C:\Untrusted.pdf';
  Pdf1.Active := True;
  Options := TPdfSanitiseOptions.Default;
  Pdf1.SaveAsSanitised('C:\Sanitised.pdf', Options, Report);
end;

See Also

SaveAsReachable, SaveAs, AuditActiveContent