Sample code for 30+ languages & platforms
Lua Requires Chilkat v9.5.0.85+

PDF Sign Under Existing Signature

See more PDF Signatures Examples

This example explains how sign a previously-signed PDF and place the signature appearance below the existing signature.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

local pdf = chilkat.Pdf.new()

-- Load a PDF to be signed.
local success = pdf:load_file("qa_data/pdf/sign_testing_4/hello_signed.pdf")
if not success then
    print(pdf.last_error_text)
    return
end

-- The PDF we'll be signing already has a signature added in Adobe Acrobat DC.
-- It looks like this:
-- (Notice the Adobe background logo, which is commonly what you'll see when a signature
-- is created by Adobe Acrobat.  Chilkat (obviously) does not create signatures using the Adobe
-- logo because it would be a copyright violation.)

-- image

-- Options for signing are specified in JSON.
local json = chilkat.JsonObject.new()

-- In most cases, the signingCertificateV2 and signingTime attributes are required.
json:update_int("signingCertificateV2", 1)
json:update_int("signingTime", 1)

-- To put our new signature underneath the existing signature, we have to specify the page
-- where the existing signature is found, and then we can specify "under" for the "appearance.y"
json:update_int("page", 1)
json:update_string("appearance.y", "under")

json:update_string("appearance.fontScale", "10.0")

json:update_string("appearance.text[0]", "Reason: Agreement Accepted by John")
json:update_string("appearance.text[1]", "Date: current_dt")

-- Load the signing certificate. (Use your own certificate.)
local cert = chilkat.Cert.new()
success = cert:load_pfx_file("qa_data/pfx/myPdfSigningCert.pfx", "secret")
if not success then
    print(cert.last_error_text)
    return
end

-- Tell the pdf object to use the certificate for signing.
success = pdf:set_signing_cert(cert)
if not success then
    print(pdf.last_error_text)
    return
end

-- Note: When adding an additional signature to a PDF, the existing signatures
-- are validated, and this includes validating the certificates previously used to
-- create the existing signatures.  (A signature typically embeds the signing certs.)
-- In some cases, the certificates and/or certs in the chain of authentication for
-- existing signatures are not present, and are not available on the current system.
-- In this case, you can skip the validation by setting this keyword in UncommonOptions:
pdf.uncommon_options = "NO_VERIFY_CERT_SIGNATURES"

success = pdf:sign_pdf(json, "qa_output/hello_signed.pdf")
if not success then
    print(pdf.last_error_text)
    return
end

print("The PDF has been successfully cryptographically signed.")

-- Here's a screenshot of the 2nd signature positioned under the 1st in Adobe Acrobat:

-- image