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,使用较简单的文本、轴对齐矩形和轴对齐图像片段配置;三个配置均执行源安全检查

该方法移除所有擦除注解,可选地移除其他相交注解,移除擦除页面上的文件附件注解,删除原生嵌入附件,并执行清理重写,剥离 catalog /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 几何辅助函数