Tcl
Tcl
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 Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set pdf [new_CkPdf]
# Load a PDF to be signed.
set success [CkPdf_LoadFile $pdf "qa_data/pdf/empty.pdf"]
if {$success == 0} then {
puts [CkPdf_lastErrorText $pdf]
delete_CkPdf $pdf
exit
}
# Options for signing are specified in JSON.
set json [new_CkJsonObject]
# In most cases, the signingCertificateV2 and signingTime attributes are required.
CkJsonObject_UpdateInt $json "signingCertificateV2" 1
CkJsonObject_UpdateInt $json "signingTime" 1
# Put the signature on page 1, top left
CkJsonObject_UpdateInt $json "page" 1
CkJsonObject_UpdateString $json "appearance.y" "top"
CkJsonObject_UpdateString $json "appearance.x" "left"
# Use a font scale of 7.0
CkJsonObject_UpdateString $json "appearance.fontScale" "7.0"
# 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.
CkJsonObject_UpdateString $json "appearance.text[0]" "Date/time in PDF format: current_dt"
CkJsonObject_UpdateString $json "appearance.text[1]" "Current Local date/time: current_datetime"
CkJsonObject_UpdateString $json "appearance.text[2]" "GMT Timestamp: current_timestamp_gmt"
CkJsonObject_UpdateString $json "appearance.text[3]" "Local Timestamp: current_timestamp_local"
CkJsonObject_UpdateString $json "appearance.text[4]" "GMT RFC822 date/time: current_rfc822_dt_gmt"
CkJsonObject_UpdateString $json "appearance.text[5]" "Local RFC822 date/time: current_rfc822_dt_local"
CkJsonObject_UpdateString $json "appearance.text[6]" "Cert DN (Distinguished Name): cert_dn"
CkJsonObject_UpdateString $json "appearance.text[7]" "Cert Common Name: cert_cn"
CkJsonObject_UpdateString $json "appearance.text[8]" "Cert Organizational ID (2.5.4.97): cert_org_id"
CkJsonObject_UpdateString $json "appearance.text[9]" "Cert Email: cert_email"
CkJsonObject_UpdateString $json "appearance.text[10]" "Cert Organization: cert_organization"
CkJsonObject_UpdateString $json "appearance.text[11]" "Cert Organziational Unit: cert_ou"
CkJsonObject_UpdateString $json "appearance.text[12]" "Cert State: cert_state"
CkJsonObject_UpdateString $json "appearance.text[13]" "Cert Country: cert_country"
CkJsonObject_UpdateString $json "appearance.text[14]" "Cert Locality: cert_locality"
CkJsonObject_UpdateString $json "appearance.text[15]" "Cert Serial Number (hex): cert_serial_hex"
CkJsonObject_UpdateString $json "appearance.text[16]" "Cert Serial Number (decimal): cert_serial_dec"
CkJsonObject_UpdateString $json "appearance.text[17]" "Cert Thumbprint: cert_thumbprint"
CkJsonObject_UpdateString $json "appearance.text[18]" "Cert Issuer Common Name: cert_issuer_cn"
set jpgData [new_CkBinData]
set success [CkBinData_LoadFile $jpgData "qa_data/jpg/seal1.jpg"]
if {$success == 0} then {
puts "Failed to load the JPG image."
delete_CkPdf $pdf
delete_CkJsonObject $json
delete_CkBinData $jpgData
exit
}
set success [CkPdf_SetSignatureJpeg $pdf $jpgData]
if {$success == 0} then {
puts [CkPdf_lastErrorText $pdf]
delete_CkPdf $pdf
delete_CkJsonObject $json
delete_CkBinData $jpgData
exit
}
# Specify that we want to display the JPG image in the center with 33% opacity.
CkJsonObject_UpdateString $json "appearance.image" "custom-jpg"
CkJsonObject_UpdateString $json "appearance.imagePlacement" "center"
CkJsonObject_UpdateString $json "appearance.imageOpacity" "33"
# Load the signing certificate. (Use your own certificate.)
set cert [new_CkCert]
set success [CkCert_LoadPfxFile $cert "qa_data/pfx/myPdfSigningCert.pfx" "pfx_password"]
if {$success == 0} then {
puts [CkCert_lastErrorText $cert]
delete_CkPdf $pdf
delete_CkJsonObject $json
delete_CkBinData $jpgData
delete_CkCert $cert
exit
}
# Tell the pdf object to use the certificate for signing.
set success [CkPdf_SetSigningCert $pdf $cert]
if {$success == 0} then {
puts [CkPdf_lastErrorText $pdf]
delete_CkPdf $pdf
delete_CkJsonObject $json
delete_CkBinData $jpgData
delete_CkCert $cert
exit
}
set success [CkPdf_SignPdf $pdf $json "qa_output/hello_signed.pdf"]
if {$success == 0} then {
puts [CkPdf_lastErrorText $pdf]
delete_CkPdf $pdf
delete_CkJsonObject $json
delete_CkBinData $jpgData
delete_CkCert $cert
exit
}
puts "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)
delete_CkPdf $pdf
delete_CkJsonObject $json
delete_CkBinData $jpgData
delete_CkCert $cert