THotPDF.AddLoadedSignedSignatureField Method
Fügt einem geladenen Dokument ein signaturbereites Signaturfeld hinzu. Das Feld trägt ein Signature Dictionary mit reserviertem /ByteRange- und /Contents-Platz, sodass SignPDFWithPFX, PreparePDFForSigning und InsertSignatureHex es signieren können, sobald das Dokument gespeichert ist. Zusammen mit BeginIncrementalUpdate erhält ein bereits signiertes PDF auf diese Weise eine zweite Signatur
Deklaration
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
Parameter
| Name | Zweck |
|---|---|
PageIndex | Nullbasierter Index der geladenen Seite, die das Signatur-Widget zeigt |
X1, Y1, X2, Y2 | Widget-Rechteck im PDF-Benutzerkoordinatensystem (Punkte, Ursprung unten links); Breite und Höhe müssen positiv sein |
AFieldName | Name des neuen Signaturfelds; er darf nicht leer sein und darf im Dokument noch nicht existieren |
ContentsBytes | Für die CMS-Signatur reservierte Bytes (geschrieben als doppelt so viele Hex-Ziffern); sie müssen die vollständige Signatur aufnehmen, inklusive Zertifikate und ggf. Timestamp-Token |
SubFilter | Signaturformat, zum Beispiel adbe.pkcs7.detached oder ETSI.CAdES.detached |
Reason, Location, ContactName | Optionale Einträge /Reason, /Location und /ContactInfo des Signature Dictionary |
Rückgabewert
Gibt den Index des neuen Formularfelds zurück oder -1, wenn PageIndex außerhalb des gültigen Bereichs liegt
Verwendungshinweise
- Nach
BeginIncrementalUpdateoderLoadFromFileist keine Seite aktuell, verwenden Sie daher diese Methode stattTHPDFPage.AddSignedSignatureField, das für mitBeginDocerzeugte Dokumente gedacht ist - Im inkrementellen Modus werden Feld, Signature Dictionary, aktualisiertes AcroForm und die
/Annotsder Seite als neue Revision angehängt. Die von früheren Signaturen abgedeckten Bytes bleiben unverändert, daher bleiben diese Signaturen gültig, und die neue Signatur deckt die gesamte Datei ab - Das AcroForm erhält
/SigFlags 3(Signaturen vorhanden, nur Anhang). Anders als die anderenAddLoaded*-Feldmethoden fügt es kein/NeedAppearanceshinzu, das Viewer zum Umschreiben eines signierten Dokuments auffordern würde - Signieren Sie die gespeicherte Datei mit
SignPDFWithPFX. Für einen externen Signator oder ein HSM lesen Sie die Datei in einenAnsiString, rufen SiePreparePDFForSigningauf, um die beiden zu hashenden Bytebereiche zu erhalten, erzeugen Sie das CMS darüber und schreiben Sie dessen Hex mitInsertSignatureHex - Verwenden Sie AddLoadedSignatureField für ein leeres Feld, das ein Viewer oder ein anderes Tool später signiert
Beispiel
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');