TPDFlibSigner
Security and Signatures
描述
TPDFlibSigner 是独立的签名引擎,把 TPDFlibSignDoc 目标与 TPDFlibPFXFile 身份配对,把完成的签名作为新的增量修订版写入
从文件、流或字符串打开 PDF,用某个 open 方法绑定身份,选择目标字段,配置签名,最后以 AppendToFile、AppendToStream 或 ApplySignature 收尾
该类覆盖完整的签名功能集:摘要选择、内容预留与估算、吊销信息、承诺类型、签名策略、法律证明、DocMDP 认证级别、字段锁定、文档时间戳以及固定长度的透传签名
facade 通过文档化的 SignProcess 函数暴露同一管线;当签名工作流必须嵌入更大的自定义修订版写入器时,可直接使用这个类
语法
Delphi
TPDFlibSigner = Class
Public
Constructor Create;
Destructor Destroy; Override;
Function OpenPDF(Const FileName: WideString; Const Password: WideString): TPDFlibSignerResult;
Function OpenPDFStream(SourceStream: TStream; Const Password: WideString): TPDFlibSignerResult;
Function OpenPDFString(Const SourceString: AnsiString; Const Password: WideString): TPDFlibSignerResult;
Function OpenPFX(Const FileName: WideString; Const Password: AnsiString; UseMachineKeyset: Boolean): TPDFlibSignerResult;
Function OpenCertStore(Const StoreName, CertName: WideString; UseMachineStore: Boolean): TPDFlibSignerResult;
Function OpenCertContext(CertContext: Pointer): TPDFlibSignerResult;
Function OpenEd25519(Const CertificateDER, PrivateKeyDER: AnsiString): TPDFlibSignerResult;
Function OpenEd25519FromFile(Const CertificateFile, PrivateKeyFile: WideString): TPDFlibSignerResult;
Function OpenCNGKey(Const CertificateDER: AnsiString;
Const ProviderName, KeyName: WideString; UseMachineKey, AllowUI: Boolean): TPDFlibSignerResult;
Function OpenCNGKeyHandle(Const CertificateDER: AnsiString; KeyHandle: TPLIntPtr; AllowUI: Boolean): TPDFlibSignerResult;
Function OpenExternalDigestSigner(Const CertificateDER: AnsiString;
Signer: TPDFlibExternalDigestSignEvent; Sender: TObject;
SignProcessID, SignatureAlgorithm, SignatureReserveBytes: Integer): TPDFlibSignerResult;
Procedure SetPrivateKeyUI(AllowUI: Boolean);
Procedure SetRSAPSSPadding(Enable: Boolean);
Procedure SetLegalAttestation(Const Value: WideString);
Procedure SelectField(Const FieldName: WideString; FieldPage: Integer);
Procedure SetSignatureProperty(SignatureProperty: TPDFlibSignatureProperty; Const NewValue: AnsiString);
Procedure SetAppearanceText(Const Text: WideString; FontSize, FontRed, FontGreen, FontBlue: Double);
Procedure SetSignatureBounds(Left, Top, Width, Height: Double);
Procedure SetPassthrough(SignatureLength: Integer);
Procedure SetDocTimeStamp(SignatureLength: Integer);
Procedure SetDigestAlgorithm(Algorithm: TPDFlibDigestAlgorithm);
Procedure SetContentsReserveBytes(ExtraBytes: Integer);
Procedure SetContentsEstimate(ChainBytes, CRLBytes, OCSPBytes, TimeStampBytes, SafetyMarginPercent: Integer);
Procedure SetRevocationInfo(Const RevocationInfoDER: AnsiString);
Procedure SetCommitmentType(CommitmentType: Integer);
Procedure SetDocMDP(Level: Integer);
Function SetFieldLock(Const Action: AnsiString; Const Fields: TArray): Boolean;
Procedure SetSignaturePolicy(Const PolicyOID: AnsiString; Const PolicyHashBytes: AnsiString; HashAlgorithm: TPDFlibDigestAlgorithm);
Function AppendToFile(Const FileName: WideString): Boolean;
Function AppendToStream(TargetStream: TStream): Boolean;
Function ApplySignature: Boolean;
Function GetByteRange(Index: Integer): Int64;
Function GetEstimatedContentsBytes: Integer;
Procedure SetInPlace;
Property IsDocTimeStamp: Boolean Read FIsDocTimeStamp;
End; 方法
| OpenPDF, OpenPDFStream, OpenPDFString | 从文件、流或 ANSI 字符串打开要签名的文档 |
|---|---|
| OpenPFX, OpenCertStore, OpenCertContext | 绑定 PFX 文件、按显示名选择的系统存储证书,或外部证书上下文 |
| OpenEd25519, OpenEd25519FromFile | 从内存或文件绑定 Ed25519 密钥对 |
| OpenCNGKey, OpenCNGKeyHandle | 按提供方与密钥名,或按密钥句柄绑定 CNG 密钥 |
| OpenExternalDigestSigner | 把摘要签名委托给外部回调 |
| SelectField | 按完全限定名和页面选择签名字段 |
| SetSignatureProperty | 设置 spReason、spLocation、spContactInfo、spFieldImage、spSubFilter 和 spFieldImageOptions 之一 |
| SetAppearanceText | 保存追加时写入字段外观的自动生成可见文本块 |
| SetSignatureBounds | 把字段放到显式坐标 |
| SetPassthrough | 为外部署名生成恰好指定长度的透传签名 |
| SetDocTimeStamp | 把签名切换为文档时间戳 |
| SetDigestAlgorithm | 选择签名所用的摘要 |
| SetContentsReserveBytes, SetContentsEstimate | 预留额外字节,或依据链、CRL、OCSP 与时间戳估算加安全余量确定预留大小 |
| SetRevocationInfo | 以 DER 形式嵌入预先收集的吊销数据 |
| SetCommitmentType, SetSignaturePolicy, SetLegalAttestation | 声明签署意图、策略与法律证明 |
| SetDocMDP | 启用 DocMDP 级别 1、2 或 3 的认证签名;必须在 SelectField 之前调用 |
| SetFieldLock | 写入带动作和字段名列表的字段锁定字典 |
| AppendToFile, AppendToStream | 把已签名修订版写入新文件或流 |
| ApplySignature | 把签名应用到原地文档 |
| GetByteRange, GetEstimatedContentsBytes | 修订版构建后回读 ByteRange 条目和估算的内容大小 |
| SetInPlace | 把修订版标记为对已打开文档的原地更新 |
参数
| IsDocTimeStamp | 签名器正在生成文档时间戳时为 True |
|---|
备注
所有 open 方法都返回 TPDFlibSignerResult
DocMDP 级别对应 ISO 32000 变换 P 值:1 不允许更改、2 允许填表、3 允许批注;非零时会置位 AcroForm /SigFlags 的 AppendOnly 位,让查看器强制执行认证
另请参阅
TPDFlibSignDoc, TPDFlibPFXFile, TPDFlibSignerResult, NewSignProcessFromFile, SetSignProcessDocMDP