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, AppendToStreamStarter en ny inkrementel revision på stedet eller tilføjer revisionen til en ny fil eller stream
CloseFrigiver den underliggende smart reader og dokumenthandles
AddSignatureFieldRegistrerer et nyt signaturfelt på den givne side og returnerer dets objektnummer, eller 0 ved fejl
HasSignatureFieldTrue, når et signaturfelt med det fuldt kvalificerede navn findes
GetSignatureFieldNamesUdfylder en TStrings med alle signaturfeltnavne i AcroForm
GetSignatureValueObjNumObjektnummeret på signaturværdiordbogen, eller 0 når feltet er usigneret
GetSignatureValueByNameRå 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
GetSignatureTextValueByNameTekstværdier valgt via ValueKey: 0 = /M, 1 = /Name, 2 = /Reason, 3 = /Location, 4 = /ContactInfo, 5 = /Type
GetSignatureDocMDPLevelByNameDocMDP-transformniveauet (P-værdi) for en certificeringssignatur, 0 når fraværende
GetSignaturePermissionInfoByNameParser en signatures DocMDP- og FieldMDP-betingelser til en rapportrecord
GetSignatureSeedValueExLæser /SV-seed value-ordbogen, der begrænser, hvad en underskriver må skrive i feltet
GetSignatureContentsHashHexByNameHex-digest af det signerede indhold, som ByteRange dækker
SetSignatureValueSkriver en færdig signatur i det reserverede /Contents-rum og noterer DocMDP-niveauet
SetSignatureFieldLockSkriver en feltlåsningsordbog med en handling og en feltnavneliste
SetSignatureImage, SetSignatureAppearanceText, SetSignatureBoundsStyrer det synlige udseende: et tegnet billede, en kun-tekst appearance stream bygget i v3.221.0 og eksplicitte feltgrænser
GetDocumentBytes, GetDocumentSize, ReadDocumentRangeRå adgang til de underliggende bytes, så hele filen eller et ByteRange-segment kan hases eksternt
GetDSSValidationMaterialReturnerer DSS-certifikater, CRL'er og OCSP-svar for et felt og rapporterer, om VRI-beviser blev brugt
SetSignatureFlags, EnsurePAdESExtensionsJusterer /SigFlags og tilføjer ETSI PAdES-udvidelsesskemaet

Parametre

IsOpenTrue mellem et vellykket open og Close
SignatureFieldPositionFiloffset for det valgte signaturfelts indhold
SignatureFieldLengthBytelæ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