TPDFlibSignDoc
Security and Signatures
Descrizione
TPDFlibSignDoc fornisce accesso diretto ai campi firma di un documento senza caricare l'intero PDF in memoria
La classe apre un file, uno stream di proprietà di chi chiama o una stringa di byte ANSI, enumera i campi firma AcroForm e legge i valori grezzi di una firma esistente perché un verificatore possa ricalcolare il digest di /ByteRange
Gestisce anche il lato scrittura degli aggiornamenti incrementali: Append avvia una nuova revisione, AddSignatureField registra un campo nuovo, e la famiglia SetSignatureValue scrive nello spazio riservato lasciando intatte le revisioni precedenti
La demo SigningWorkbench pilota questa classe da capo a fondo, dall'enumerazione dei campi all'ispezione del ByteRange e all'estrazione dei certificati
Sintassi
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; Metodi
| Open, OpenStream, OpenString | Apre un file, uno stream o una stringa ANSI in memoria, facoltativamente in lettura-scrittura; Open accetta una password e un flag di lettura-scrittura |
|---|---|
| Append, AppendToFile, AppendToStream | Avvia una nuova revisione incrementale in place, o accoda la revisione a un nuovo file o stream |
| Close | Rilascia lo smart reader sottostante e gli handle del documento |
| AddSignatureField | Registra un nuovo campo firma sulla pagina indicata e restituisce il suo numero di oggetto, o 0 in caso di fallimento |
| HasSignatureField | True quando esiste un campo firma con il nome completo |
| GetSignatureFieldNames | Riempie un TStrings con tutti i nomi dei campi firma dell'AcroForm |
| GetSignatureValueObjNum | Numero di oggetto del dizionario del valore di firma, o 0 quando il campo non è firmato |
| GetSignatureValueByName | Valori binari grezzi selezionati da ValueKey: 0 = /Contents, 1 = /Cert, 2 = /Filter, 3 = /SubFilter, da 11 a 14 = voci da 0 a 3 di /ByteRange come stringhe decimali |
| GetSignatureTextValueByName | Valori testuali selezionati da ValueKey: 0 = /M, 1 = /Name, 2 = /Reason, 3 = /Location, 4 = /ContactInfo, 5 = /Type |
| GetSignatureDocMDPLevelByName | Il livello di trasformazione DocMDP (valore P) di una firma di certificazione, 0 se assente |
| GetSignaturePermissionInfoByName | Analizza i vincoli DocMDP e FieldMDP di una firma in un record di report |
| GetSignatureSeedValueEx | Legge il dizionario di seed value /SV che vincola ciò che un firmatario può scrivere nel campo |
| GetSignatureContentsHashHexByName | Digest esadecimale dei contenuti firmati coperti dal ByteRange |
| SetSignatureValue | Scrive una firma completata nello spazio riservato di /Contents e registra il livello DocMDP |
| SetSignatureFieldLock | Scrive un dizionario di field lock con un'azione e una lista di nomi di campo |
| SetSignatureImage, SetSignatureAppearanceText, SetSignatureBounds | Controllano l'aspetto visibile: un'immagine disegnata, un appearance stream di solo testo introdotto in v3.221.0 e limiti espliciti del campo |
| GetDocumentBytes, GetDocumentSize, ReadDocumentRange | Accesso grezzo ai byte sottostanti così il file intero o un segmento del ByteRange può essere hashato esternamente |
| GetDSSValidationMaterial | Restituisce i certificati DSS, le CRL e le risposte OCSP di un campo e riporta se è stata usata evidenza VRI |
| SetSignatureFlags, EnsurePAdESExtensions | Regola /SigFlags e aggiunge lo schema di estensione ETSI PAdES |
Parametri
| IsOpen | True tra un'apertura riuscita e Close |
|---|---|
| SignatureFieldPosition | Offset nel file dei contenuti del campo firma selezionato |
| SignatureFieldLength | Lunghezza in byte riservata ai contenuti della firma selezionata |
Note
L'intero file viene materializzato da GetDocumentBytes perché i due segmenti del ByteRange insieme coprono praticamente tutto il file
Per firmare senza toccare questa superficie di basso livello, la facade espone la pipeline equivalente tramite le funzioni SignProcess documentate
Vedere anche
TPDFlibSignatureVerifier, TPDFlibPFXFile, TPDFlibSigner, NewSignProcessFromFile, GetSignProcessByteRange