PDFium Delphi Component Docs

SaveAsRedacted 方法

元件: TPdf  ·  單元: PDFium
對隔離的快照套用 PDF 消密標註,寫出乾淨的單一修訂結果,而不修改已載入的文件

語法

function SaveAsRedacted(Stream: TStream;
  const Options: TPdfRedactionOptions;
  out Report: TPdfRedactionReport): Boolean; overload;

function SaveAsRedacted(const FileName: string;
  const Options: TPdfRedactionOptions;
  out Report: TPdfRedactionReport): Boolean; overload;

說明

SaveAsRedacted 會將目前文件擷取到隔離的隨機存取快照,把該快照開啟為獨立的 TPdf,並處理每個 /Redact 標註矩形

預設選項同時啟用 PreservePartialObjects 與 PreserveComplexObjects,保留受支援的安全幾何;此有上限模式從保留字元片段重建文字、裁切實心填色路徑,並清除仿射影像中相交的像素

存在任何遮除註解時,詳細模式會在套用遮除之前展開所有頁面中的每個 Form XObject 執行個體,包括未遮除頁面;組合執行個體變換後,可透過資源裁除移除原始共用 Form 串流

設定 PreservePartialObjects := False 可移除整個相交物件;也可保持啟用,將 PreserveComplexObjects := False 設為較簡單的文字、軸對齊矩形與軸對齊影像分割模式;三種模式都會執行來源安全檢查

此方法移除所有遮除註解,可選擇移除其他相交註解,移除遮除頁面的檔案附件註解、刪除原生內嵌附件,再執行清理重寫,移除目錄 /AF、主動內容、表單、中繼資料與不可達物件

頁面內容重新產生之後,精確的資源修剪會掃描頁面、Form XObject、圖樣、外觀、繼承與巢狀資源範圍,只移除未使用的名稱,然後捨棄無法觸達的物件

輸出只有一份乾淨修訂,不含先前文件修訂,已載入來源文件則維持原樣;不支援的來源語意或詳細幾何會中止操作,不產生部分遮除結果

選項

上述 Form、路徑、影像、幾何與容差選項由詳細模式驗證並使用,不會提高獨立的來源檢查預算

報告

TPdfRedactionReport 傳回 RedactionCount、RedactedPageCount、ScannedObjectCount、RemovedObjectCount、RemovedAnnotationCount、RemovedAttachmentCount、OverlayCount、SplitTextObjectCount、SplitPathObjectCount、SplitImageObjectCount、PreservedFragmentCount、位元組計數、巢狀的 SanitiseReport 與 ResourcePruneReport、Succeeded,以及 ErrorMessage

詳細工作新增 ExpandedFormCount、ScannedFormChildCount、FlattenedCurveCount、GeneratedPathPointCount、MaskedImageCount、ScannedImagePixelCount、MaskedImagePixelCount、PixelIntersectionTestCount 及 GeometryOperationCount;成功處理後,CurveTolerancePdfPoints 記錄設定的容差

ScannedFormChildCount 計算展開期間走訪的原生物件,包含根 Form 執行個體;GeneratedPathPointCount 包含中間裁切點與展平曲線點

MaskedImagePixelCount 計算完整色彩與 Alpha 樣本被清除的像素,PreservedFragmentCount 則計算取代物件,不是個別保留像素或多邊形輪廓;失敗時處理計數可能只涵蓋部分工作,不代表已提交輸出

安全性邊界

範例

var
  Options: TPdfRedactionOptions;
  Report: TPdfRedactionReport;
begin
  Options := TPdfRedactionOptions.Default;
  Options.FillColor := clBlack;
  if not Pdf1.SaveAsRedacted('C:\redacted.pdf', Options, Report) then
    raise Exception.Create(Report.ErrorMessage);
end;

另請參閱

SaveAsSanitised, SaveAsReachable, CreateAnnotation, FPdfRedaction geometry helpers