Sample code for 30+ languages & platforms
Tcl Requires Chilkat v11.7.0+

What PDF Text Replacement Does Not Change: Metadata, Links, Form Fields

See more PDF Text Replacement Examples

TextReplace changes the page content only. A placeholder that also appears in the document's metadata (the Title, Author, Subject, Keywords, Creator or Producer), in a link's target URL, or in a form field's value is left as it is and reported in "notReplaced" with "where" saying which. The invoice template's title is "Invoice for {{customer}}" and its "View this invoice online" link points at a URL that holds {{customer}}.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

#  The PDF used in this example is available at invoice_template.pdf

set pdf [new_CkPdf]

set success [CkPdf_LoadFile $pdf "qa_data/pdf/invoice_template.pdf"]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf]
    delete_CkPdf $pdf
    exit
}

set json [new_CkJsonObject]

CkJsonObject_UpdateString $json "placeholders.customer" "Acme Corp"
#  (The other placeholders are left as they are for this example.)
CkJsonObject_UpdateString $json "unusedPlaceholders" "keep"

set jsonOut [new_CkJsonObject]

set success [CkPdf_TextReplace $pdf "apply" $json $jsonOut]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf]
    delete_CkPdf $pdf
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    exit
}

puts "In the page content, customer was replaced [CkJsonObject_IntOf $jsonOut {replacements[0].count}] times."

#  Where else the placeholder occurs, untouched:
set i 0
set count_i [CkJsonObject_SizeOfArray $jsonOut "notReplaced"]
while {$i < $count_i} {
    CkJsonObject_put_I $jsonOut $i
    puts "not replaced: {{[CkJsonObject_stringOf $jsonOut {notReplaced[i].field}]}} in [CkJsonObject_stringOf $jsonOut {notReplaced[i].where}]"
    set i [expr $i + 1]
}

set success [CkPdf_WriteFile $pdf "qa_output/invoice_customer.pdf"]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf]
    delete_CkPdf $pdf
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    exit
}

#  Sample output:

#  In the page content, customer was replaced 2 times.
#  not replaced: {{customer}} in metadata
#  not replaced: {{customer}} in linkTarget

delete_CkPdf $pdf
delete_CkJsonObject $json
delete_CkJsonObject $jsonOut