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, OpenStringApre 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, AppendToStreamAvvia una nuova revisione incrementale in place, o accoda la revisione a un nuovo file o stream
CloseRilascia lo smart reader sottostante e gli handle del documento
AddSignatureFieldRegistra un nuovo campo firma sulla pagina indicata e restituisce il suo numero di oggetto, o 0 in caso di fallimento
HasSignatureFieldTrue quando esiste un campo firma con il nome completo
GetSignatureFieldNamesRiempie un TStrings con tutti i nomi dei campi firma dell'AcroForm
GetSignatureValueObjNumNumero di oggetto del dizionario del valore di firma, o 0 quando il campo non è firmato
GetSignatureValueByNameValori 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
GetSignatureTextValueByNameValori testuali selezionati da ValueKey: 0 = /M, 1 = /Name, 2 = /Reason, 3 = /Location, 4 = /ContactInfo, 5 = /Type
GetSignatureDocMDPLevelByNameIl livello di trasformazione DocMDP (valore P) di una firma di certificazione, 0 se assente
GetSignaturePermissionInfoByNameAnalizza i vincoli DocMDP e FieldMDP di una firma in un record di report
GetSignatureSeedValueExLegge il dizionario di seed value /SV che vincola ciò che un firmatario può scrivere nel campo
GetSignatureContentsHashHexByNameDigest esadecimale dei contenuti firmati coperti dal ByteRange
SetSignatureValueScrive una firma completata nello spazio riservato di /Contents e registra il livello DocMDP
SetSignatureFieldLockScrive un dizionario di field lock con un'azione e una lista di nomi di campo
SetSignatureImage, SetSignatureAppearanceText, SetSignatureBoundsControllano l'aspetto visibile: un'immagine disegnata, un appearance stream di solo testo introdotto in v3.221.0 e limiti espliciti del campo
GetDocumentBytes, GetDocumentSize, ReadDocumentRangeAccesso grezzo ai byte sottostanti così il file intero o un segmento del ByteRange può essere hashato esternamente
GetDSSValidationMaterialRestituisce i certificati DSS, le CRL e le risposte OCSP di un campo e riporta se è stata usata evidenza VRI
SetSignatureFlags, EnsurePAdESExtensionsRegola /SigFlags e aggiunge lo schema di estensione ETSI PAdES

Parametri

IsOpenTrue tra un'apertura riuscita e Close
SignatureFieldPositionOffset nel file dei contenuti del campo firma selezionato
SignatureFieldLengthLunghezza 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