Visual FoxPro Requires Chilkat v11.7.0+
Visual FoxPro
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 Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loPdf
LOCAL loJson
LOCAL loJsonOut
lnSuccess = 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
loPdf = CreateObject('Chilkat.Pdf')
lnSuccess = loPdf.LoadFile("qa_data/pdf/invoice_template.pdf")
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
CANCEL
ENDIF
* Values for every placeholder except {{po}} (the purchase order number, which this customer has none of).
loJson = CreateObject('Chilkat.JsonObject')
loJson.UpdateString("placeholders.customer","Acme Corp")
loJson.UpdateString("placeholders.date","2026-10-18")
loJson.UpdateString("placeholders.qty1","2")
loJson.UpdateString("placeholders.desc1","Cordless drill, 18 V")
loJson.UpdateString("placeholders.price1","$460.00")
loJson.UpdateString("placeholders.amount1","$920.00")
loJson.UpdateString("placeholders.qty2","6")
loJson.UpdateString("placeholders.desc2","Galvanized hinge, 4 inch")
loJson.UpdateString("placeholders.price2","$12.50")
loJson.UpdateString("placeholders.amount2","$75.00")
loJson.UpdateString("placeholders.subtotal","$995.00")
loJson.UpdateString("placeholders.taxRate","7.35%")
loJson.UpdateString("placeholders.tax","$73.13")
loJson.UpdateString("placeholders.total","$1,068.13")
loJsonOut = CreateObject('Chilkat.JsonObject')
* The default, "error": the unfilled {{po}} is a problem and nothing would be applied.
lnSuccess = loPdf.TextReplace("check",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut
CANCEL
ENDIF
? "error (default): ok = " + STR(loJsonOut.BoolOf("ok")) + ", problem: " + loJsonOut.StringOf("problems[0].field") + " " + loJsonOut.StringOf("problems[0].reason")
* "keep": {{po}} stays on the page, literally.
loJson.UpdateString("unusedPlaceholders","keep")
lnSuccess = loPdf.TextReplace("check",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut
CANCEL
ENDIF
? "keep: ok = " + STR(loJsonOut.BoolOf("ok"))
* "blank": {{po}} is replaced by nothing, leaving "PO Number:" with an empty value.
loJson.UpdateString("unusedPlaceholders","blank")
lnSuccess = loPdf.TextReplace("apply",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut
CANCEL
ENDIF
? "blank: applied = " + STR(loJsonOut.BoolOf("applied"))
lnSuccess = loPdf.WriteFile("qa_output/invoice_no_po.pdf")
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut
CANCEL
ENDIF
* Sample output:
* error (default): ok = false, problem: po unusedPlaceholder
* keep: ok = true
* blank: applied = true
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut