TPDFlibSignDoc

Security and Signatures

Beskrivning

TPDFlibSignDoc ger direkt åtkomst till ett dokuments signaturfält utan att läsa in hela PDF:en i minnet

Klassen öppnar en fil, en anroparägd stream eller en ANSI-bytesträng, räknar upp AcroForm-signaturfälten och läser råvärdena från en befintlig signatur så att en verifierare kan räkna om /ByteRange-digesten

Den sköter också skrivsidan av inkrementella uppdateringar: Append startar en ny revision, AddSignatureField registrerar ett nytt fält, och SetSignatureValue-familjen skriver i det reserverade utrymmet medan tidigare revisioner lämnas orörda

SigningWorkbench-demon driver den här klassen hela vägen, från fältuppräkning till ByteRange-inspektion och certifikatutdragning

Syntax

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Öppnar en fil, en stream eller en ANSI-sträng i minnet, eventuellt för läs-skrivåtkomst; Open tar emot ett lösenord och en läs-skrivflagga
Append, AppendToFile, AppendToStreamStartar en ny inkrementell revision på plats, eller lägger revisionen till en ny fil eller stream
CloseFrigör den underliggande smart readern och dokumenthandtagen
AddSignatureFieldRegistrerar ett nytt signaturfält på den angivna sidan och returnerar dess objektnummer, eller 0 vid fel
HasSignatureFieldTrue när ett signaturfält med det fullt kvalificerade namnet finns
GetSignatureFieldNamesFyller en TStrings med alla signaturfältnamn i AcroForm
GetSignatureValueObjNumObjektnummer för signaturvärdesordboken, eller 0 när fältet är osignerat
GetSignatureValueByNameRåa binära värden valda via ValueKey: 0 = /Contents, 1 = /Cert, 2 = /Filter, 3 = /SubFilter, 11 till 14 = /ByteRange-poster 0 till 3 som decimalsträngar
GetSignatureTextValueByNameTextvärden valda via ValueKey: 0 = /M, 1 = /Name, 2 = /Reason, 3 = /Location, 4 = /ContactInfo, 5 = /Type
GetSignatureDocMDPLevelByNameDocMDP-transformationsnivån (P-värde) för en certifierande signatur, 0 när den saknas
GetSignaturePermissionInfoByNameTolkar en signaturs DocMDP- och FieldMDP-begränsningar till en rapportpost
GetSignatureSeedValueExLäser /SV-seed value-ordboken som begränsar vad en signerare får skriva i fältet
GetSignatureContentsHashHexByNameHex-digest av det signerade innehåll som ByteRange täcker
SetSignatureValueSkriver en färdig signatur i det reserverade /Contents-utrymmet och noterar DocMDP-nivån
SetSignatureFieldLockSkriver en fältlåsningsordbok med en åtgärd och en fältnamnlista
SetSignatureImage, SetSignatureAppearanceText, SetSignatureBoundsStyr det synliga utseendet: en ritad bild, en i v3.221.0 byggd enbart-text appearance stream och explicita fältgränser
GetDocumentBytes, GetDocumentSize, ReadDocumentRangeRå åtkomst till de underliggande bytes så att hela filen eller ett ByteRange-segment kan hashas externt
GetDSSValidationMaterialReturnerar DSS-certifikat, CRL:er och OCSP-svar för ett fält och rapporterar om VRI-bevis användes
SetSignatureFlags, EnsurePAdESExtensionsJusterar /SigFlags och lägger till ETSI PAdES-tilläggsschemat

Parametrar

IsOpenTrue mellan en lyckad open och Close
SignatureFieldPositionFiloffset för det valda signaturfältets innehåll
SignatureFieldLengthBytelängd reserverad för den valda signaturens innehåll

Anmärkningar

Hela filen materialiseras av GetDocumentBytes, eftersom de två ByteRange-segmenten tillsammans täcker i princip hela filen

Vill du signera utan att röra det här lågnivågränssnittet exponerar fasaden samma pipeline via de dokumenterade SignProcess-funktionerna

Se även

TPDFlibSignatureVerifier, TPDFlibPFXFile, TPDFlibSigner, NewSignProcessFromFile, GetSignProcessByteRange