Metoda THotPDF.AddLoadedSignedSignatureField
Přidá do načteného dokumentu pole podpisu připravené k podpisu. Pole nese slovník podpisu s vyhrazeným prostorem pro /ByteRange a /Contents, takže SignPDFWithPFX, PreparePDFForSigning a InsertSignatureHex ho mohou podepsat, jakmile se dokument uloží. V kombinaci s BeginIncrementalUpdate tak již podepsané PDF dostane druhý podpis
Deklarace
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;
Jednotka
HPDFDoc
Parametry
| Název | Účel |
|---|---|
PageIndex | Index počítaný od nuly pro načtenou stránku, na které se zobrazuje widget podpisu |
X1, Y1, X2, Y2 | Obdélník widgetu v uživatelském prostoru PDF (body, počátek vlevo dole); šířka a výška musí být kladné |
AFieldName | Název nového pole podpisu; nesmí být prázdný a nesmí už v dokumentu existovat |
ContentsBytes | Bajty vyhrazené pro podpis CMS (zapisují se jako dvojnásobný počet hex číslic); musí pojmout kompletní podpis, včetně certifikátů a případného tokenu časového razítka |
SubFilter | Formát podpisu, například adbe.pkcs7.detached nebo ETSI.CAdES.detached |
Reason, Location, ContactName | Volitelné položky /Reason, /Location a /ContactInfo slovníku podpisu |
Návratová hodnota
Vrací index nového formulářového pole, nebo -1, když je PageIndex mimo rozsah
Poznámky k použití
- Po
BeginIncrementalUpdateneboLoadFromFilenení aktuální žádná stránka, takže použijte tuto metodu místoTHPDFPage.AddSignedSignatureField, která je určena pro dokumenty vytvořené přesBeginDoc - V inkrementálním režimu se pole, jeho slovník podpisu, aktualizovaný AcroForm a
/Annotsstránky připojují jako nová revize. Bajty kryté dřívějšími podpisy se nemění, takže tyto podpisy zůstávají platné a nový podpis pokrývá celý soubor - AcroForm dostane
/SigFlags 3(existují podpisy, jen přidávání). Na rozdíl od ostatních metod políAddLoaded*nepřidává/NeedAppearances, které by vyzvalo prohlížeče, aby podepsaný dokument přepisovaly - Uložený soubor podepište přes
SignPDFWithPFX. Pro externí podepisující nástroj nebo HSM načtěte soubor doAnsiString, zavolejtePreparePDFForSigning, abyste získali dva bajtové rozsahy k hašování, sestavte nad nimi CMS a jeho hex zapište přesInsertSignatureHex - Pro prázdné pole, které později podepíše prohlížeč nebo jiný nástroj, použijte AddLoadedSignatureField
Příklad
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');