认证签名与字段锁

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目标、transform 版本、重复引用、UR 与 UR3 限制,以及可选的 DocMDP /P 2 默认值

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

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

标准变换覆盖

方法报告的策略
DocMDP认证权限及匹配的 Catalog /Perms /DocMDP 目标
UR文档、注释、表单、签名与嵌入文件使用权,外加旧式 /UR 或字节区间 /UR3 来源
FieldMDPAll、Include 或 Exclude 字段锁作用域及复制的 SigFieldLock 协定
Identity从必需的间接 /Data 根可达的、无环的传递对象号

未知方法名保留在 UnknownTransformMethods 中并使权限结构无效,关键变换不会被漏看

验证边界

GetLoadedSignaturePermissions 仅报告策略结构

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

AnalyzeLoadedSignatureRevisions 对字节区间 DocMDP、FieldMDP、UR3 与 Identity 策略做逐修订的语义更改分析;已弃用的非字节区间 UR 对象摘要签名仍可做结构检查

SaveIncrementalUpdateAuthenticated 把检查变成强制:从签名快照读取策略、认证控制签名、验证所有后续修订,只有在全部策略通过后才经原子替换发布

性能

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

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

另请参阅