THotPDF.AddLoadedSignedSignatureField Method
Adiciona a um documento carregado um campo de assinatura pronto para assinar. O campo carrega um dicionário de assinatura com espaço reservado para /ByteRange e /Contents, de modo que SignPDFWithPFX, PreparePDFForSigning e InsertSignatureHex podem assiná-lo assim que o documento for salvo. Em conjunto com BeginIncrementalUpdate, é assim que um PDF já assinado recebe uma segunda assinatura
Declaração
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;
Unidade
HPDFDoc
Parâmetros
| Nome | Finalidade |
|---|---|
PageIndex | Índice baseado em zero da página carregada que exibe o widget de assinatura |
X1, Y1, X2, Y2 | Retângulo do widget no espaço de usuário do PDF (pontos, origem no canto inferior esquerdo); largura e altura devem ser positivas |
AFieldName | Nome do novo campo de assinatura; não pode ser vazio nem já existir no documento |
ContentsBytes | Bytes reservados para a assinatura CMS (gravados como o dobro de dígitos hexadecimais); devem comportar a assinatura completa, incluindo certificados e qualquer token de timestamp |
SubFilter | Formato da assinatura, por exemplo adbe.pkcs7.detached ou ETSI.CAdES.detached |
Reason, Location, ContactName | Entradas opcionais /Reason, /Location e /ContactInfo do dicionário de assinatura |
Valor de retorno
Retorna o índice do novo campo de formulário, ou -1 quando PageIndex está fora da faixa
Notas de uso
- Nenhuma página é atual após
BeginIncrementalUpdateouLoadFromFile, então use este método em vez deTHPDFPage.AddSignedSignatureField, que serve para documentos criados comBeginDoc - No modo incremental, o campo, o dicionário de assinatura dele, o AcroForm atualizado e os
/Annotsda página são anexados como uma nova revisão. Os bytes cobertos por assinaturas anteriores não mudam, então essas assinaturas continuam válidas, e a nova assinatura cobre o arquivo inteiro - O AcroForm recebe
/SigFlags 3(há assinaturas, apenas anexar). Ao contrário dos demais métodos de campoAddLoaded*, ele não adiciona/NeedAppearances, que pediria aos viewers para reescrever um documento assinado - Assine o arquivo salvo com
SignPDFWithPFX. Para um signer externo ou HSM, leia o arquivo para umAnsiString, chamePreparePDFForSigningpara obter os dois byte ranges a hashear, construa o CMS sobre eles e grave o hex dele comInsertSignatureHex - Use AddLoadedSignatureField para um campo vazio que um viewer ou outra ferramenta assina depois
Exemplo
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');