TPDFlibSignDoc
Security and Signatures
Popis
TPDFlibSignDoc dává přímý přístup k podpisovým polím dokumentu bez načítání celého PDF do paměti
Třída otevře soubor, stream vlastněný volajícím nebo ANSI bajtový řetězec, vyčísí podpisová pole AcroForm a přečte surové hodnoty existujícího podpisu, aby si ověřovatel mohl přepočítat digest /ByteRange
Vykonává i zapisovou stranu přírůstkových aktualizací: Append rozjede novou revizi, AddSignatureField zaregistruje čerstvé pole a rodina SetSignatureValue píše do vyhrazeného místa, aniž by sahala na dřívější revize
Ukázka SigningWorkbench tuto třídu veze celou, od výčtu polí po prohlídku ByteRange a extrakci certifikátu
Syntaxe
Delphi
TPDFlibSignDoc = Class
Public
Destructor Destroy; Override;
Function Open(Const FileName: WideString; Const Password: WideString; ReadWrite: Boolean): Boolean;
Function OpenStream(SourceStream: TStream; Const Password: WideString): Boolean;
Function OpenString(Const SourceData: AnsiString; Const Password: WideString): Boolean;
Procedure Append;
Function AppendToFile(Const FileName: WideString): Boolean;
Function AppendToStream(TargetStream: TStream): Boolean;
Procedure Close;
Function AddSignatureField(Const FieldName: WideString; PageNumber: Integer): Integer;
Function HasSignatureField(Const FieldName: WideString): Boolean;
Procedure GetSignatureFieldNames(Names: TStrings);
Function GetSignatureValueObjNum(Const FieldName: WideString): Integer;
Function GetSignatureValueByName(Const FieldName: WideString; ValueKey: Integer): AnsiString;
Function GetSignatureTextValueByName(Const FieldName: WideString; ValueKey: Integer): WideString;
Function GetSignatureDocMDPLevelByName(Const FieldName: WideString): Integer;
Function GetSignaturePermissionInfoByName(Const FieldName: WideString;
Out Report: TPDFlibSignaturePermissionReport): Boolean;
Function GetSignatureSeedValueEx(Const FieldName: WideString;
Out SeedValue: TPDFSignatureSeedValue): Boolean;
Function GetSignatureContentsHashHexByName(Const FieldName: WideString): AnsiString;
Function SetSignatureValue(Const FieldName: WideString; Const NewValue: AnsiString;
DocMDPLevel: Integer): Boolean;
Function SetSignatureFieldLock(Const FieldName: WideString;
Const Action: AnsiString; Const Fields: TArray): Boolean;
Procedure SetSignatureImage(Const FieldName: WideString; Const ImageData: AnsiString; ImageOptions: Integer);
Procedure SetSignatureAppearanceText(Const FieldName, Text: WideString; FontSize, FontRed, FontGreen, FontBlue: Double);
Procedure SetSignatureBounds(Const FieldName: WideString; Left, Top, Width, Height: Double);
Function GetDocumentBytes: TBytes;
Function GetDocumentSize: Int64;
Function ReadDocumentRange(Offset: Int64; Buffer: Pointer; Count: Integer): Integer;
Function GetDSSValidationMaterial(Const FieldName: WideString;
Out Certs, CRLs, OCSPs: TStructStrArray; Out UsedVRI: Boolean): Boolean;
Procedure SetSignatureFlags(NewFlags: Integer);
Procedure EnsurePAdESExtensions(ESICLevel: Integer);
Property IsOpen: Boolean Read FIsOpen;
Property SignatureFieldPosition: Int64 Read FSignatureFieldPosition;
Property SignatureFieldLength: Integer Read FSignatureFieldLength;
End; Metody
| Open, OpenStream, OpenString | Otevře soubor, stream nebo ANSI řetězec v paměti, volitelně pro čtení i zápis; Open přijímá heslo a příznak čtení-zápisu |
|---|---|
| Append, AppendToFile, AppendToStream | Rozjede novou přírůstkovou revizi na místě nebo připojí revizi k novému souboru či streamu |
| Close | Uvolní podkladového chytrého čtečku a handle dokumentu |
| AddSignatureField | Registruje nové podpisové pole na dané stránce a vrátí jeho číslo objektu, při selhání 0 |
| HasSignatureField | True, když existuje podpisové pole s plně kvalifikovaným názvem |
| GetSignatureFieldNames | Naplní TStrings názvy všech podpisových polí v AcroForm |
| GetSignatureValueObjNum | Číslo objektu slovníku hodnoty podpisu, nebo 0, když pole nepodepsáno |
| GetSignatureValueByName | Surové binární hodnoty vybírané podle ValueKey: 0 = /Contents, 1 = /Cert, 2 = /Filter, 3 = /SubFilter, 11-14 = položky 0-3 /ByteRange jako desítkové řetězce |
| GetSignatureTextValueByName | Textové hodnoty vybírané podle ValueKey: 0 = /M, 1 = /Name, 2 = /Reason, 3 = /Location, 4 = /ContactInfo, 5 = /Type |
| GetSignatureDocMDPLevelByName | Úroveň transformace DocMDP (hodnota P) certifikujícího podpisu, 0 když chybí |
| GetSignaturePermissionInfoByName | Rozparsuje omezení DocMDP a FieldMDP podpisu do záznamu reportu |
| GetSignatureSeedValueEx | Přečte slovník seed hodnot /SV, který omezuje, co smí podepisující do pole napsat |
| GetSignatureContentsHashHexByName | Hex digest podepsaného obsahu pokrytého ByteRange |
| SetSignatureValue | Zapíše hotový podpis do vyhrazeného místa /Contents a zaznamená úroveň DocMDP |
| SetSignatureFieldLock | Zapíše slovník uzamčení pole s akcí a seznamem názvů polí |
| SetSignatureImage, SetSignatureAppearanceText, SetSignatureBounds | Ovládání viditelného vzhledu: nakreslený obrázek, vzhledový stream jen s textem postavený ve v3.221.0 a explicitní meze pole |
| GetDocumentBytes, GetDocumentSize, ReadDocumentRange | Surový přístup k podkladovým bajtům, takže celý soubor nebo segment ByteRange lze hashovat externě |
| GetDSSValidationMaterial | Vrací certifikáty DSS, CRL a odpovědi OCSP pro pole a hlásí, zda se použily důkazy VRI |
| SetSignatureFlags, EnsurePAdESExtensions | Doladí /SigFlags a přidá schéma rozšíření ETSI PAdES |
Parametry
| IsOpen | True mezi úspěšným otevřením a Close |
|---|---|
| SignatureFieldPosition | Posun v souboru obsahu vybraného podpisového pole |
| SignatureFieldLength | Délka v bajtech vyhrazená pro obsah vybraného podpisu |
Poznámky
Celý soubor se materializuje přes GetDocumentBytes, protože oba segmenty ByteRange dohromady pokrývají v podstatě celý soubor
Když chcete podepisovat, aniž byste sáhli na tuto nízkoúrovňovou plochu, fasada vystavuje ekvivalentní pipeline přes zdokumentované funkce SignProcess
Viz také
TPDFlibSignatureVerifier, TPDFlibPFXFile, TPDFlibSigner, NewSignProcessFromFile, GetSignProcessByteRange