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