PDFium Delphi Component 文件

SaveAsSanitised 方法

组件: TPdf  ·  单元: PDFium
通过有界的目录和 trailer 更新写出干净的单修订版本副本,然后修剪不可达对象,使孤立的 JavaScript、动作、附件和元数据主体从文件主体中消失

语法

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;

说明

SaveAsSanitised 生成净化后的单修订版本 PDF 副本,先从文档目录移除活动内容载体,然后可选地运行可达性修剪,从文件主体中清除孤立对象

该两阶段管道先通过 StripDictionaryEntries 以增量更新的方式剥离目录条目(/OpenAction、/AA、/Names、/AF、/AcroForm、/Metadata),然后运行 PruneUnreachablePdfStream 将文件重写为一个干净的经典修订版本

目录和 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 时,输出始终是没有增量历史的单一修订版本

参数

备注

示例

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;

参见

SaveAsReachable, SaveAs, AuditActiveContent