认证签名与字段锁

HotPDF 可以编写附加到认证签名和已签字段锁的 PDF 权限结构,然后在已加载文档中检查相同的结构

生产者 API

procedure AddCertificationSignatureField(
  const FieldName: AnsiString;
  Rectangle: TRect;
  Permission: THPDFDocMDPPermission;
  ContentsBytes: Integer = 8192;
  const SubFilter: AnsiString = 'adbe.pkcs7.detached';
  const Reason: AnsiString = '';
  const Location: AnsiString = '';
  const ContactName: AnsiString = '';
  Flags: THPDFFormFieldFlags = []);

procedure ConfigureCertificationSignature(
  const FieldName: AnsiString;
  Permission: THPDFDocMDPPermission);

procedure AttachSignatureFieldLock(
  const FieldName: AnsiString;
  Action: THPDFFieldLockAction;
  const Fields: array of AnsiString);

AddCertificationSignatureField 将已签占位符创建与认证配置结合在一起

ConfigureCertificationSignature 用于已存在的已编写已签占位符,并要求该字段是第一个携带签名字典的字段

一个文档只能包含一个认证签名,因此在对象图被更改之前会拒绝第二个配置请求

这些 API 自动协商 PDF 1.5 输出

DocMDP 权限级别

认证权限
dmpNoChanges认证后不允许任何更改
dmpFormFillAndSign允许表单填写、模板实例化和签名
dmpFormFillSignAndAnnotate允许上述更改以及注释的创建、删除和修改

dmpNone 保留用于没有 DocMDP 转换的检查结果,生产者方法会拒绝它

字段锁范围

Fields 参数 签名后的效果
flaAll必须为空锁定每个表单字段
flaInclude一个或多个唯一字段名仅锁定列出的字段
flaExclude一个或多个唯一字段名锁定除列出字段外的每个字段

AttachSignatureFieldLock 拒绝空名称、重复名称、无效的动作值、不兼容的 Fields 形状、未签名的目标字段,或已经携带锁或 FieldMDP 策略的字段

生成的结构

Delphi 示例

var
  LockedFields: THPDFAnsiStringArray;
begin
  HotPDF.CurrentPage.AddTextField(
    'InternalCode', '', Rect(40, 80, 220, 108));

  HotPDF.CurrentPage.AddCertificationSignatureField(
    'CertSig', Rect(40, 140, 260, 190),
    dmpFormFillAndSign, 8192,
    'adbe.pkcs7.detached', 'Document approval');

  SetLength(LockedFields, 1);
  LockedFields[0] := 'InternalCode';
  HotPDF.CurrentPage.AttachSignatureFieldLock(
    'CertSig', flaInclude, LockedFields);
end;

已加载检查

function GetLoadedSignaturePermissions(
  SigIndex: Integer;
  out Info: THPDFSignaturePermissionInfo): Boolean;

读取器报告 DocMDP 权限、Catalog 链接、SigFieldLock 范围、FieldMDP 范围、字段名称、结构有效性和诊断问题字符串

它验证必需的直接和间接对象形状,并确认 Catalog /Perms /DocMDP 指向同一个签名字典

如果 SigFieldLock 和 FieldMDP 都存在,它们的动作和字段列表必须一致

读取器执行有界的字典和数组检查,不执行 JavaScript、动作或签名内容

验证边界

GetLoadedSignaturePermissions 仅报告策略结构

VerifyLoadedSignature 继续单独报告密码学完整性

两个方法都不声称每个后续增量修订都遵守报告的 DocMDP 或 FieldMDP 权限,因为这需要逐修订的语义更改分析

性能

生产者验证只扫描已编写的 AcroForm 字段和小的签名引用数组,而已加载检查只读取选定的签名、其锁、其引用和 Catalog 权限条目

不解码任何页面内容、图像流、字体程序或无关的间接对象

参见