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

PDF Placeholders Without a Value: Error, Blank or Keep

See more PDF Text Replacement Examples

Demonstrates the "unusedPlaceholders" option, which decides what happens to a placeholder found on the page that has no value in "placeholders": "error" (the default) makes it a problem with the reason unusedPlaceholder, so nothing is applied; "blank" replaces it with nothing; "keep" leaves it on the page as it is.

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
}

#  Values for every placeholder except {{po}} (the purchase order number, which this customer has none of).
set json [new_CkJsonObject]

CkJsonObject_UpdateString $json "placeholders.customer" "Acme Corp"
CkJsonObject_UpdateString $json "placeholders.date" "2026-10-18"
CkJsonObject_UpdateString $json "placeholders.qty1" "2"
CkJsonObject_UpdateString $json "placeholders.desc1" "Cordless drill, 18 V"
CkJsonObject_UpdateString $json "placeholders.price1" "$460.00"
CkJsonObject_UpdateString $json "placeholders.amount1" "$920.00"
CkJsonObject_UpdateString $json "placeholders.qty2" "6"
CkJsonObject_UpdateString $json "placeholders.desc2" "Galvanized hinge, 4 inch"
CkJsonObject_UpdateString $json "placeholders.price2" "$12.50"
CkJsonObject_UpdateString $json "placeholders.amount2" "$75.00"
CkJsonObject_UpdateString $json "placeholders.subtotal" "$995.00"
CkJsonObject_UpdateString $json "placeholders.taxRate" "7.35%"
CkJsonObject_UpdateString $json "placeholders.tax" "$73.13"
CkJsonObject_UpdateString $json "placeholders.total" "$1,068.13"

set jsonOut [new_CkJsonObject]

#  The default, "error": the unfilled {{po}} is a problem and nothing would be applied.
set success [CkPdf_TextReplace $pdf "check" $json $jsonOut]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf]
    delete_CkPdf $pdf
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    exit
}

puts "error (default): ok = [CkJsonObject_BoolOf $jsonOut ok], problem: [CkJsonObject_stringOf $jsonOut {problems[0].field}] [CkJsonObject_stringOf $jsonOut {problems[0].reason}]"

#  "keep": {{po}} stays on the page, literally.
CkJsonObject_UpdateString $json "unusedPlaceholders" "keep"
set success [CkPdf_TextReplace $pdf "check" $json $jsonOut]
if {$success == 0} then {
    puts [CkPdf_lastErrorText $pdf]
    delete_CkPdf $pdf
    delete_CkJsonObject $json
    delete_CkJsonObject $jsonOut
    exit
}

puts "keep: ok = [CkJsonObject_BoolOf $jsonOut ok]"

#  "blank": {{po}} is replaced by nothing, leaving "PO Number:" with an empty value.
CkJsonObject_UpdateString $json "unusedPlaceholders" "blank"
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 "blank: applied = [CkJsonObject_BoolOf $jsonOut applied]"

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

#  Sample output:

#  error (default): ok = false, problem: po unusedPlaceholder
#  keep: ok = true
#  blank: applied = true

delete_CkPdf $pdf
delete_CkJsonObject $json
delete_CkJsonObject $jsonOut