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