PDFium Delphi Component Docs

带资源上限的擦除几何辅助函数

FPdfRedaction 提供 TPdf.SaveAsRedacted 所用的保守源检查和几何操作;高层方法负责事务、注解处理、不透明覆盖、内容重生成、清理及资源裁剪

辅助函数修改调用方隔离的事务副本中的原生对象,遇到不支持的几何或预算耗尽时抛出 EPdfRedactionGeometry;仅调用它们不能完成完整的安全导出

公开声明

type
  EPdfRedactionGeometry = class(Exception);
  TPdfRedactionGeometryOptions = record
    MaxFormDepth, MaxObjects, MaxPathSegments, MaxFragments: Integer;
    MaxImagePixels, MaxGeometryOperations: Int64;
    CurveTolerance: Double;
    class function Default: TPdfRedactionGeometryOptions; static;
  end;
  TPdfRedactionGeometryReport = record
    ExpandedFormCount, ScannedChildCount, ClippedPathCount: Integer;
    FlattenedCurveCount, GeneratedPointCount, FragmentCount: Integer;
    MaskedImageCount: Integer;
    ScannedPixelCount, MaskedPixelCount, PixelIntersectionTestCount: Int64;
    GeometryOperationCount: Int64;
  end;

procedure ValidateDetailedRedactionSource(Source: TStream);
procedure ValidateDetailedRedactionText(PageObject: FPDF_PAGEOBJECT);
procedure ExpandRedactionForms(Page: FPDF_PAGE;
  const Options: TPdfRedactionGeometryOptions;
  var Report: TPdfRedactionGeometryReport);
procedure ClipRedactionPath(Page: FPDF_PAGE; PageObject: FPDF_PAGEOBJECT;
  ObjectIndex: Integer; const Redactions: array of FS_RECTF;
  const Options: TPdfRedactionGeometryOptions;
  var Report: TPdfRedactionGeometryReport);
procedure MaskRedactionImage(Document: FPDF_DOCUMENT; Page: FPDF_PAGE;
  PageObject: FPDF_PAGEOBJECT; ObjectIndex: Integer;
  const Redactions: array of FS_RECTF;
  const Options: TPdfRedactionGeometryOptions;
  var Report: TPdfRedactionGeometryReport);

坐标与支持的几何

所有擦除矩形和曲线容差均使用 PDF 用户空间点;裁剪前路径点先转换到页面空间,ObjectIndex 是原生页面对象原始的零基索引,用于保留绘制顺序

展开及部分几何处理拒绝透明或混合状态、不支持的子对象类型、奇异矩阵、图案填充和复杂或非冗余裁剪路径;受支持的冗余矩形裁剪须包含整个对象边界

选项与累计报告

选项默认值含义
MaxFormDepth32嵌套 Form 展开深度
MaxObjects1000000页面枚举和累计展开子对象上限
MaxPathSegments262144每路径输入段数及累计生成路径点数
MaxFragments1000000保留矩形区域及累计替换片段上限
MaxImagePixels16777216累计处理的解码图像像素
MaxGeometryOperations67108864累计几何和像素相交工作量
CurveTolerance0.01以 PDF 点计的三次曲线展平容差

使用 TPdfRedactionGeometryOptions.Default 初始化选项,在事务开始前将报告清零一次;后续辅助调用共用该报告,使生成点、图像像素、片段和操作预算累计计算

ExpandedFormCount 和 ScannedChildCount 描述展开工作,访问计数包含根 Form 实例和子对象;ClippedPathCount、FlattenedCurveCount 和 GeneratedPointCount 描述路径工作,包括中间裁剪点;MaskedImageCount、ScannedPixelCount、MaskedPixelCount 和 PixelIntersectionTestCount 描述图像工作

FragmentCount 统计替换对象,而不是多边形轮廓或像素;GeometryOperationCount 累计受限辅助操作,异常后的报告可能记录已丢弃事务副本上完成的部分工作

源检查与导出边界

ValidateDetailedRedactionSource 在修改前检查有效对象和解码内容;TPdf.SaveAsRedacted 对所有处理配置都会调用它,包括整个对象移除和较简单的部分保留配置

当前配置不重建 Tagged PDF 结构,不保留任意透明度,不支持任意描边或裁剪,也不承诺编码图像无损保留;安全输出须在重生成后移除原始流和未使用资源,TPdf.SaveAsRedacted 会完成这些步骤

直接调用者须提供隔离文档副本,验证原生能力及有限正数预算,失败时丢弃副本,重生成已修改页面内容,并在导出前完成清理和资源裁剪

另请参阅

TPdf.SaveAsRedacted, TPdf.SaveAsSanitised, FPdfCompress