TPDFlibSignDoc
Security and Signatures
Beskrivelse
TPDFlibSignDoc giver direkte adgang til et dokuments signaturfelter uden at indlæse hele PDF'en i hukommelsen
Klassen åbner en fil, en kalder-ejet stream eller en ANSI-bytestreng, optæller AcroForm-signaturfelterne og læser råværdierne af en eksisterende signatur, så en verifikator kan genberegne /ByteRange-digestet
Den udfører også skrivesiden af inkrementelle opdateringer: Append starter en ny revision, AddSignatureField registrerer et nyt felt, og SetSignatureValue-familien skriver i det reserverede rum, mens tidligere revisioner holdes intakte
SigningWorkbench-demoen driver denne klasse hele vejen, fra felt-optælling til ByteRange-inspektion og certifikatudtrækning
Syntaks
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; Metoder
| Open, OpenStream, OpenString | Åbner en fil, en stream eller en ANSI-streng i hukommelsen, evt. til læse-skriveadgang; Open accepterer en adgangskode og et læse-skriveflag |
|---|---|
| Append, AppendToFile, AppendToStream | Starter en ny inkrementel revision på stedet eller tilføjer revisionen til en ny fil eller stream |
| Close | Frigiver den underliggende smart reader og dokumenthandles |
| AddSignatureField | Registrerer et nyt signaturfelt på den givne side og returnerer dets objektnummer, eller 0 ved fejl |
| HasSignatureField | True, når et signaturfelt med det fuldt kvalificerede navn findes |
| GetSignatureFieldNames | Udfylder en TStrings med alle signaturfeltnavne i AcroForm |
| GetSignatureValueObjNum | Objektnummeret på signaturværdiordbogen, eller 0 når feltet er usigneret |
| GetSignatureValueByName | Rå binære værdier valgt via ValueKey: 0 = /Contents, 1 = /Cert, 2 = /Filter, 3 = /SubFilter, 11 til 14 = /ByteRange-indgange 0 til 3 som decimalstrenge |
| GetSignatureTextValueByName | Tekstværdier valgt via ValueKey: 0 = /M, 1 = /Name, 2 = /Reason, 3 = /Location, 4 = /ContactInfo, 5 = /Type |
| GetSignatureDocMDPLevelByName | DocMDP-transformniveauet (P-værdi) for en certificeringssignatur, 0 når fraværende |
| GetSignaturePermissionInfoByName | Parser en signatures DocMDP- og FieldMDP-betingelser til en rapportrecord |
| GetSignatureSeedValueEx | Læser /SV-seed value-ordbogen, der begrænser, hvad en underskriver må skrive i feltet |
| GetSignatureContentsHashHexByName | Hex-digest af det signerede indhold, som ByteRange dækker |
| SetSignatureValue | Skriver en færdig signatur i det reserverede /Contents-rum og noterer DocMDP-niveauet |
| SetSignatureFieldLock | Skriver en feltlåsningsordbog med en handling og en feltnavneliste |
| SetSignatureImage, SetSignatureAppearanceText, SetSignatureBounds | Styrer det synlige udseende: et tegnet billede, en kun-tekst appearance stream bygget i v3.221.0 og eksplicitte feltgrænser |
| GetDocumentBytes, GetDocumentSize, ReadDocumentRange | Rå adgang til de underliggende bytes, så hele filen eller et ByteRange-segment kan hases eksternt |
| GetDSSValidationMaterial | Returnerer DSS-certifikater, CRL'er og OCSP-svar for et felt og rapporterer, om VRI-beviser blev brugt |
| SetSignatureFlags, EnsurePAdESExtensions | Justerer /SigFlags og tilføjer ETSI PAdES-udvidelsesskemaet |
Parametre
| IsOpen | True mellem et vellykket open og Close |
|---|---|
| SignatureFieldPosition | Filoffset for det valgte signaturfelts indhold |
| SignatureFieldLength | Bytelængde reserveret til den valgte signatures indhold |
Bemærkninger
Hele filen materialiseres af GetDocumentBytes, fordi de to ByteRange-segmenter tilsammen dækker stort set hele filen
Til signering uden at røre dette lavniveaulag eksponerer facaden den tilsvarende pipeline via de dokumenterede SignProcess-funktioner
Se også
TPDFlibSignatureVerifier, TPDFlibPFXFile, TPDFlibSigner, NewSignProcessFromFile, GetSignProcessByteRange