THotPDF.AddLoadedSignedSignatureField Method
Ajoute à un document chargé un champ de signature prêt à signer. Le champ embarque un dictionnaire de signature avec l'espace /ByteRange et /Contents réservé, de sorte que SignPDFWithPFX, PreparePDFForSigning et InsertSignatureHex peuvent le signer une fois le document enregistré. Combinée à BeginIncrementalUpdate, c'est la façon dont un PDF déjà signé reçoit une seconde signature
Déclaration
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
Paramètres
| Nom | Objectif |
|---|---|
PageIndex | Index à base zéro de la page chargée qui affiche le widget de signature |
X1, Y1, X2, Y2 | Rectangle du widget dans l'espace utilisateur PDF (points, origine en bas à gauche) ; la largeur et la hauteur doivent être positives |
AFieldName | Nom du nouveau champ de signature ; il ne doit pas être vide et ne doit pas déjà exister dans le document |
ContentsBytes | Octets réservés à la signature CMS (écrits avec deux fois plus de chiffres hexadécimaux) ; ils doivent contenir la signature complète, certificats et jeton d'horodatage inclus |
SubFilter | Format de signature, par exemple adbe.pkcs7.detached ou ETSI.CAdES.detached |
Reason, Location, ContactName | Entrées optionnelles /Reason, /Location et /ContactInfo du dictionnaire de signature |
Valeur de retour
Renvoie l'index du nouveau champ de formulaire, ou -1 lorsque PageIndex est hors limites
Notes d'utilisation
- Aucune page n'est courante après
BeginIncrementalUpdateouLoadFromFile; utilisez donc cette méthode plutôt queTHPDFPage.AddSignedSignatureField, qui vise les documents créés avecBeginDoc - En mode incrémental, le champ, son dictionnaire de signature, l'AcroForm mis à jour et les
/Annotsde la page sont ajoutés comme une nouvelle révision. Les octets couverts par les signatures antérieures ne changent pas, ces signatures restent donc valides, et la nouvelle signature couvre tout le fichier - L'AcroForm reçoit
/SigFlags 3(des signatures existent, ajout seul). Contrairement aux autres méthodes de champsAddLoaded*, il n'ajoute pas/NeedAppearances, qui demanderait aux lecteurs de réécrire un document signé - Signez le fichier enregistré avec
SignPDFWithPFX. Avec un signataire externe ou un HSM, lisez le fichier dans unAnsiString, appelezPreparePDFForSigningpour obtenir les deux plages d'octets à hacher, construisez la CMS par-dessus et écrivez son hexadécimal avecInsertSignatureHex - Utilisez AddLoadedSignatureField pour un champ vide qu'un lecteur ou un autre outil signera plus tard
Exemple
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');