THotPDF.AddLoadedSignedSignatureField Method
Dodaje do załadowanego dokumentu pole podpisu gotowe do podpisania. Pole zawiera słownik podpisu z zarezerwowanym miejscem na /ByteRange i /Contents, dzięki czemu SignPDFWithPFX, PreparePDFForSigning i InsertSignatureHex mogą je podpisać po zapisaniu dokumentu. W połączeniu z BeginIncrementalUpdate jest to sposób, w jaki już podpisany PDF otrzymuje drugi podpis
Deklaracja
function AddLoadedSignedSignatureField(PageIndex: Integer; X1, Y1, X2, Y2: Single;
const AFieldName: AnsiString; ContentsBytes: Integer = 8192;
const SubFilter: AnsiString = 'adbe.pkcs7.detached';
const Reason: AnsiString = ''; const Location: AnsiString = '';
const ContactName: AnsiString = ''): Integer;
Jednostka
HPDFDoc
Parametry
| Nazwa | Przeznaczenie |
|---|---|
PageIndex | Indeks załadowanej strony pokazującej widget podpisu liczony od zera |
X1, Y1, X2, Y2 | Prostokąt widgetu w przestrzeni użytkownika PDF (punkty, początek układu w lewym dolnym rogu), szerokość i wysokość muszą być dodatnie |
AFieldName | Nazwa nowego pola podpisu, nie może być pusta ani już istnieć w dokumencie |
ContentsBytes | Bajty zarezerwowane na podpis CMS (zapisywane jako dwukrotnie więcej cyfr szesnastkowych), muszą pomieścić kompletny podpis, łącznie z certyfikatami i ewentualnym tokenem znacznika czasu |
SubFilter | Format podpisu, na przykład adbe.pkcs7.detached albo ETSI.CAdES.detached |
Reason, Location, ContactName | Opcjonalne wpisy /Reason, /Location i /ContactInfo słownika podpisu |
Wartość zwracana
Zwraca indeks nowego pola formularza albo -1, gdy PageIndex jest poza zakresem
Uwagi dotyczące użycia
- Po
BeginIncrementalUpdatelubLoadFromFileżadna strona nie jest bieżąca, więc używaj tej metody zamiastTHPDFPage.AddSignedSignatureField, która jest przeznaczona dla dokumentów utworzonych przezBeginDoc - W trybie przyrostowym pole, jego słownik podpisu, zaktualizowany AcroForm i
/Annotsstrony są dopisywane jako nowa rewizja. Bajty objęte wcześniejszymi podpisami nie są zmieniane, więc te podpisy pozostają ważne, a nowy podpis obejmuje cały plik - AcroForm dostaje
/SigFlags 3(podpisy istnieją, tylko dopisywanie). W odróżnieniu od pozostałych metod pólAddLoaded*nie dodaje/NeedAppearances, które nakłaniałoby przeglądarki do przepisywania podpisanego dokumentu - Podpisz zapisany plik przez
SignPDFWithPFX. Dla zewnętrznego podpisującego albo HSM wczytaj plik doAnsiString, wywołajPreparePDFForSigning, aby otrzymać dwa zakresy bajtów do haszowania, zbuduj nad nimi CMS i zapisz jego hex przezInsertSignatureHex - Użyj AddLoadedSignatureField dla pustego pola, które przeglądarka albo inne narzędzie podpisze później
Przykład
PDF := THotPDF.Create(nil);
try
PDF.BeginIncrementalUpdate('Signed.pdf');
PDF.AddLoadedSignedSignatureField(0, 300, 120, 500, 160, 'Approver', 8192,
'adbe.pkcs7.detached', 'Approved');
PDF.SaveIncrementalUpdate('Prepared.pdf');
finally
PDF.Free;
end;
// Signs the reserved field; the first signature stays valid
THotPDF.SignPDFWithPFX('Prepared.pdf', 'SignedTwice.pdf', 'Signer.pfx', 'password');