TPDFlibSigner
Security and Signatures
설명
TPDFlibSigner는 독립형 서명 엔진입니다. TPDFlibSignDoc 대상과 TPDFlibPFXFile 아이덴티티를 짝지어 완성된 서명을 새 증분 리비전으로 기록합니다
PDF를 파일·스트림·문자열에서 열고, open 계열 메서드 중 하나로 아이덴티티를 바인드하고, 대상 필드를 고르고, 서명을 설정한 뒤 AppendToFile, AppendToStream, ApplySignature로 마무리합니다
이 클래스는 서명 기능 전체를 다룹니다. 다이제스트 선택, 내용 예약과 추정, 폐기 정보, 커밋먼트 타입, 서명 정책, 법적 증명, DocMDP 인증 레벨, 필드 잠금, 문서 타임스탬프, 고정 길이 패스스루 서명
파사드는 문서화된 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 = 주석. 0이 아니면 AcroForm /SigFlags의 AppendOnly 비트가 켜져 뷰어가 인증을 강제합니다
참고 항목
TPDFlibSignDoc, TPDFlibPFXFile, TPDFlibSignerResult, NewSignProcessFromFile, SetSignProcessDocMDP