Método THotPDF.AddLoadedSignedSignatureField
Añade a un documento cargado un campo de firma listo para firmar. El campo lleva un diccionario de firma con espacio reservado para /ByteRange y /Contents, de modo que SignPDFWithPFX, PreparePDFForSigning e InsertSignatureHex pueden firmarlo una vez guardado el documento. Junto con BeginIncrementalUpdate, así es como un PDF ya firmado recibe una segunda firma
Declaración
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;
Unidad
HPDFDoc
Parámetros
| Nombre | Propósito |
|---|---|
PageIndex | Índice basado en cero de la página cargada que muestra el widget de firma |
X1, Y1, X2, Y2 | Rectángulo del widget en el espacio de usuario PDF (puntos, origen en la parte inferior izquierda); la anchura y la altura deben ser positivas |
AFieldName | Nombre del nuevo campo de firma; no puede estar vacío ni existir ya en el documento |
ContentsBytes | Bytes reservados para la firma CMS (se escriben el doble de dígitos hexadecimales); deben alojar la firma completa, incluidos los certificados y cualquier token de sello de tiempo |
SubFilter | Formato de firma, por ejemplo adbe.pkcs7.detached o ETSI.CAdES.detached |
Reason, Location, ContactName | Entradas opcionales /Reason, /Location y /ContactInfo del diccionario de firma |
Valor de retorno
Devuelve el índice del nuevo campo de formulario, o -1 cuando PageIndex está fuera de rango
Notas de uso
- Tras
BeginIncrementalUpdateoLoadFromFileno hay ninguna página actual, así que use este método en lugar deTHPDFPage.AddSignedSignatureField, pensado para documentos creados conBeginDoc - En modo incremental, el campo, su diccionario de firma, el AcroForm actualizado y las
/Annotsde la página se añaden como una nueva revisión. Los bytes cubiertos por las firmas anteriores no cambian, de modo que esas firmas siguen siendo válidas, y la nueva firma cubre el archivo completo - El AcroForm recibe
/SigFlags 3(hay firmas, solo anexar). A diferencia de los demás métodos de camposAddLoaded*, no añade/NeedAppearances, que pediría a los visores reescribir un documento firmado - Firme el archivo guardado con
SignPDFWithPFX. Para un firmante externo o un HSM, lea el archivo en unAnsiString, llame aPreparePDFForSigningpara obtener los dos rangos de bytes que hay que resumir, construya el CMS sobre ellos y escriba su hexadecimal conInsertSignatureHex - Use AddLoadedSignatureField para un campo vacío que un visor u otra herramienta firmará más tarde
Ejemplo
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');