TPDFlibSignDoc

Security and Signatures

Popis

TPDFlibSignDoc dává přímý přístup k podpisovým polím dokumentu bez načítání celého PDF do paměti

Třída otevře soubor, stream vlastněný volajícím nebo ANSI bajtový řetězec, vyčísí podpisová pole AcroForm a přečte surové hodnoty existujícího podpisu, aby si ověřovatel mohl přepočítat digest /ByteRange

Vykonává i zapisovou stranu přírůstkových aktualizací: Append rozjede novou revizi, AddSignatureField zaregistruje čerstvé pole a rodina SetSignatureValue píše do vyhrazeného místa, aniž by sahala na dřívější revize

Ukázka SigningWorkbench tuto třídu veze celou, od výčtu polí po prohlídku ByteRange a extrakci certifikátu

Syntaxe

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;

Metody

Open, OpenStream, OpenStringOtevře soubor, stream nebo ANSI řetězec v paměti, volitelně pro čtení i zápis; Open přijímá heslo a příznak čtení-zápisu
Append, AppendToFile, AppendToStreamRozjede novou přírůstkovou revizi na místě nebo připojí revizi k novému souboru či streamu
CloseUvolní podkladového chytrého čtečku a handle dokumentu
AddSignatureFieldRegistruje nové podpisové pole na dané stránce a vrátí jeho číslo objektu, při selhání 0
HasSignatureFieldTrue, když existuje podpisové pole s plně kvalifikovaným názvem
GetSignatureFieldNamesNaplní TStrings názvy všech podpisových polí v AcroForm
GetSignatureValueObjNumČíslo objektu slovníku hodnoty podpisu, nebo 0, když pole nepodepsáno
GetSignatureValueByNameSurové binární hodnoty vybírané podle ValueKey: 0 = /Contents, 1 = /Cert, 2 = /Filter, 3 = /SubFilter, 11-14 = položky 0-3 /ByteRange jako desítkové řetězce
GetSignatureTextValueByNameTextové hodnoty vybírané podle ValueKey: 0 = /M, 1 = /Name, 2 = /Reason, 3 = /Location, 4 = /ContactInfo, 5 = /Type
GetSignatureDocMDPLevelByNameÚroveň transformace DocMDP (hodnota P) certifikujícího podpisu, 0 když chybí
GetSignaturePermissionInfoByNameRozparsuje omezení DocMDP a FieldMDP podpisu do záznamu reportu
GetSignatureSeedValueExPřečte slovník seed hodnot /SV, který omezuje, co smí podepisující do pole napsat
GetSignatureContentsHashHexByNameHex digest podepsaného obsahu pokrytého ByteRange
SetSignatureValueZapíše hotový podpis do vyhrazeného místa /Contents a zaznamená úroveň DocMDP
SetSignatureFieldLockZapíše slovník uzamčení pole s akcí a seznamem názvů polí
SetSignatureImage, SetSignatureAppearanceText, SetSignatureBoundsOvládání viditelného vzhledu: nakreslený obrázek, vzhledový stream jen s textem postavený ve v3.221.0 a explicitní meze pole
GetDocumentBytes, GetDocumentSize, ReadDocumentRangeSurový přístup k podkladovým bajtům, takže celý soubor nebo segment ByteRange lze hashovat externě
GetDSSValidationMaterialVrací certifikáty DSS, CRL a odpovědi OCSP pro pole a hlásí, zda se použily důkazy VRI
SetSignatureFlags, EnsurePAdESExtensionsDoladí /SigFlags a přidá schéma rozšíření ETSI PAdES

Parametry

IsOpenTrue mezi úspěšným otevřením a Close
SignatureFieldPositionPosun v souboru obsahu vybraného podpisového pole
SignatureFieldLengthDélka v bajtech vyhrazená pro obsah vybraného podpisu

Poznámky

Celý soubor se materializuje přes GetDocumentBytes, protože oba segmenty ByteRange dohromady pokrývají v podstatě celý soubor

Když chcete podepisovat, aniž byste sáhli na tuto nízkoúrovňovou plochu, fasada vystavuje ekvivalentní pipeline přes zdokumentované funkce SignProcess

Viz také

TPDFlibSignatureVerifier, TPDFlibPFXFile, TPDFlibSigner, NewSignProcessFromFile, GetSignProcessByteRange