THotPDF.AddLoadedSignedSignatureField Method
Aggiunge a un documento caricato un campo firma pronto per la firma. Il campo porta un dizionario di firma con spazio riservato per /ByteRange e /Contents, così SignPDFWithPFX, PreparePDFForSigning e InsertSignatureHex possono firmarlo una volta salvato il documento. Insieme a BeginIncrementalUpdate è il modo in cui un PDF già firmato riceve una seconda firma
Dichiarazione
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;
Unità
HPDFDoc
Parametri
| Nome | Scopo |
|---|---|
PageIndex | Indice in base zero della pagina caricata che mostra il widget della firma |
X1, Y1, X2, Y2 | Rettangolo del widget nello spazio utente PDF (punti, origine in basso a sinistra); larghezza e altezza devono essere positive |
AFieldName | Nome del nuovo campo firma; non deve essere vuoto e non deve già esistere nel documento |
ContentsBytes | Byte riservati alla firma CMS (scritti come il doppio di cifre esadecimali); devono contenere la firma completa, inclusi i certificati e l'eventuale token timestamp |
SubFilter | Formato della firma, ad esempio adbe.pkcs7.detached o ETSI.CAdES.detached |
Reason, Location, ContactName | Voci opzionali /Reason, /Location e /ContactInfo del dizionario di firma |
Valore restituito
Restituisce l'indice del nuovo campo modulo, o -1 quando PageIndex è fuori intervallo
Note d'uso
- Dopo
BeginIncrementalUpdateoLoadFromFilenon c'è pagina corrente, quindi usa questo metodo invece diTHPDFPage.AddSignedSignatureField, pensato per i documenti creati conBeginDoc - In modalità incrementale il campo, il suo dizionario di firma, l'AcroForm aggiornato e le
/Annotsdi pagina vengono aggiunti come nuova revisione. I byte coperti dalle firme precedenti non cambiano, quindi quelle firme restano valide, e la nuova firma copre l'intero file - L'AcroForm riceve
/SigFlags 3(firme presenti, solo append). A differenza degli altri metodiAddLoaded*per i campi, non aggiunge/NeedAppearances, che chiederebbe ai viewer di riscrivere un documento firmato - Firma il file salvato con
SignPDFWithPFX. Con un signer esterno o un HSM, leggi il file in unAnsiString, chiamaPreparePDFForSigningper ottenere i due byte range da sottoporre a hash, costruisci il CMS su quegli intervalli e scrivi il suo valore hex conInsertSignatureHex - Usa AddLoadedSignatureField per un campo vuoto che un viewer o un altro strumento firmerà in seguito
Esempio
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');