DataFlex
DataFlex
PDF Signature Appearance Text Substitution Keywords
See more PDF Signatures Examples
This example demonstrates the text substitution keywords that can be used in the PDF signature's appearance text.Note: This example requires Chilkat v9.5.0.85 or greater.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoPdf
Variant vJson
Handle hoJson
Variant vJpgData
Handle hoJpgData
Variant vCert
Handle hoCert
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatPdf)) To hoPdf
If (Not(IsComObjectCreated(hoPdf))) Begin
Send CreateComObject of hoPdf
End
// Load a PDF to be signed.
Get ComLoadFile Of hoPdf "qa_data/pdf/empty.pdf" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf To sTemp1
Showln sTemp1
Procedure_Return
End
// Options for signing are specified in JSON.
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
// In most cases, the signingCertificateV2 and signingTime attributes are required.
Get ComUpdateInt Of hoJson "signingCertificateV2" 1 To iSuccess
Get ComUpdateInt Of hoJson "signingTime" 1 To iSuccess
// Put the signature on page 1, top left
Get ComUpdateInt Of hoJson "page" 1 To iSuccess
Get ComUpdateString Of hoJson "appearance.y" "top" To iSuccess
Get ComUpdateString Of hoJson "appearance.x" "left" To iSuccess
// Use a font scale of 7.0
Get ComUpdateString Of hoJson "appearance.fontScale" "7.0" To iSuccess
// The appearance of the PDF signature can contain any number of text lines.
// Chilkat has defined a number of special keywords that can be used in any text line.
// Each keyword is replaced with the actual value.
// For example, "cert_cn" is replaced with the certificate subject's common name (CN).
// Here we are creating a signature with many lines of text, to demonstrate each
// keyword.
Get ComUpdateString Of hoJson "appearance.text[0]" "Date/time in PDF format: current_dt" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[1]" "Current Local date/time: current_datetime" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[2]" "GMT Timestamp: current_timestamp_gmt" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[3]" "Local Timestamp: current_timestamp_local" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[4]" "GMT RFC822 date/time: current_rfc822_dt_gmt" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[5]" "Local RFC822 date/time: current_rfc822_dt_local" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[6]" "Cert DN (Distinguished Name): cert_dn" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[7]" "Cert Common Name: cert_cn" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[8]" "Cert Organizational ID (2.5.4.97): cert_org_id" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[9]" "Cert Email: cert_email" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[10]" "Cert Organization: cert_organization" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[11]" "Cert Organziational Unit: cert_ou" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[12]" "Cert State: cert_state" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[13]" "Cert Country: cert_country" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[14]" "Cert Locality: cert_locality" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[15]" "Cert Serial Number (hex): cert_serial_hex" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[16]" "Cert Serial Number (decimal): cert_serial_dec" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[17]" "Cert Thumbprint: cert_thumbprint" To iSuccess
Get ComUpdateString Of hoJson "appearance.text[18]" "Cert Issuer Common Name: cert_issuer_cn" To iSuccess
Get Create (RefClass(cComChilkatBinData)) To hoJpgData
If (Not(IsComObjectCreated(hoJpgData))) Begin
Send CreateComObject of hoJpgData
End
Get ComLoadFile Of hoJpgData "qa_data/jpg/seal1.jpg" To iSuccess
If (iSuccess = False) Begin
Showln "Failed to load the JPG image."
Procedure_Return
End
Get pvComObject of hoJpgData to vJpgData
Get ComSetSignatureJpeg Of hoPdf vJpgData To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf To sTemp1
Showln sTemp1
Procedure_Return
End
// Specify that we want to display the JPG image in the center with 33% opacity.
Get ComUpdateString Of hoJson "appearance.image" "custom-jpg" To iSuccess
Get ComUpdateString Of hoJson "appearance.imagePlacement" "center" To iSuccess
Get ComUpdateString Of hoJson "appearance.imageOpacity" "33" To iSuccess
// Load the signing certificate. (Use your own certificate.)
Get Create (RefClass(cComChilkatCert)) To hoCert
If (Not(IsComObjectCreated(hoCert))) Begin
Send CreateComObject of hoCert
End
Get ComLoadPfxFile Of hoCert "qa_data/pfx/myPdfSigningCert.pfx" "pfx_password" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoCert To sTemp1
Showln sTemp1
Procedure_Return
End
// Tell the pdf object to use the certificate for signing.
Get pvComObject of hoCert to vCert
Get ComSetSigningCert Of hoPdf vCert To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf To sTemp1
Showln sTemp1
Procedure_Return
End
Get pvComObject of hoJson to vJson
Get ComSignPdf Of hoPdf vJson "qa_output/hello_signed.pdf" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPdf To sTemp1
Showln sTemp1
Procedure_Return
End
Showln "The PDF has been successfully cryptographically signed."
// The appearance of the signature appears in Adobe Acrobat as shown here:
// (image:https://example-code.com/images/pdf_signature_text_replacements.jpg/endImage)
End_Procedure