THPDFHeadlessDocument.SignToFile
function SignToFile(FieldIndex: Integer; const FileName: string;
const CertificatePEM, PrivateKeyPEM: SysUtils.TBytes;
const Options: THPDFHeadlessCMSOptions;
ReservedCMSBytes: Integer = 16384): THPDFHeadlessCMSResult;
对既有未签名的 AcroForm 签名字段签名,并在原生 Linux 或 Windows 上原子发布独立输出
FieldIndex 是 FindFormField 或 GetFormField 返回的从零计数的表单字段下标,可能与 VerifySignature 接受的已签名签名下标不同
证书与匹配私钥必须是 PEM 字节;加密私钥会被直接拒绝、不做提示;OpenSSL 3 通过与 HPDFSignHeadlessCMS 相同的 provider 加载
ReservedCMSBytes 在哈希前预留固定十六进制 Contents 空隙;必须为正、能放进文档对象预算,并容纳完整生成的 CMS DER
默认 profile 为 adbe.pkcs7.detached;RequireCAdES=true 写入 ETSI.CAdES.detached 并包含 signing-certificate 属性,文档校验会自动认证其 ESS 绑定,显式 CA 信任单独评估
写入器复制源字节,通过共享 xref 写入器追加替换字段值与新签名对象,修补定宽 ByteRange 槽位,对真实 staging 文件范围签名,并在刷盘与原子发布之前校验生成的 CMS
每个更早的审批签名保留其原始字节;其校验结果报告有效的更早修订及其后未签名字节数
源以只读方式打开,签名不改变已加载字段图,源路径别名或物理文件别名会被拒绝
失败时保留既有目标文件并删除未发布的 staging 文件,涵盖取消、预留不足、证书/私钥失败、密码学错误以及对象或文件预算耗尽
只读字段、已签名字段值、不允许的认证文档策略与被拒绝的 AES 表单填充权限都会被拒绝;所有者认证可以放行受限源,输出保留原始用户口令与安全策略
CertificationPermission 为 1 到 3 时创建首认证签名,带 catalog Perms.DocMDP 与 SigRef transform;为 0 时创建审批签名,包括 DocMDP P2 或 P3 下既有字段中被允许的后续签名
文档与 CMS 选项都指定取消 Token 时必须用同一个;否则 CMS provider 继承文档 Token
返回的 THPDFHeadlessCMSResult 把完整性与显式评估的 CA 信任分开;不隐含任何时间戳、吊销或长期校验结论
用 AddSignatureField 与 SetSignatureFieldAppearance 准备新的可见签名控件,或用 SignPFXToFile 经 OpenSSL 3 加载 PKCS12 身份
用 TimestampToFile 追加独立的 RFC3161 文档时间戳,无需应用签名身份