Visual FoxPro Requires Chilkat v11.7.0+
Visual FoxPro
Fill a PDF Template: Replace {{placeholders}} with Values
See more PDF Text Replacement Examples
Demonstrates the TextReplace method on an invoice template whose values are written as placeholders such as {{customer}} and {{total}}. The "placeholders" object names each placeholder and the text to put in; every occurrence on the page is replaced, including a placeholder inside a sentence or inside a label such as "Tax ({{taxRate}}):". The text is redrawn with the font the template used, so the result looks like the template, and a value that is right-aligned in the template stays right-aligned. The changes are written by WriteFile.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loPdf
LOCAL loJson
LOCAL loJsonOut
LOCAL i
LOCAL lnCount_i
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
* The template has these placeholders in its page text:
* {{customer}} (twice: "Bill To:" and the closing sentence), {{date}}, {{po}},
* two item rows: {{qty1}} {{desc1}} {{price1}} {{amount1}} and {{qty2}} {{desc2}} {{price2}} {{amount2}},
* {{subtotal}}, "Tax ({{taxRate}}):" with {{tax}}, and {{total}}.
loJson = CreateObject('Chilkat.JsonObject')
loJson.UpdateString("placeholders.customer","Acme Corp")
loJson.UpdateString("placeholders.date","2026-10-18")
loJson.UpdateString("placeholders.po","PO-88213")
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")
* "apply" makes every replacement, or none: if any value cannot be drawn with the
* template's font, the method returns false, the PDF is unchanged, and jsonOut says why.
loJsonOut = CreateObject('Chilkat.JsonObject')
lnSuccess = loPdf.TextReplace("apply",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
? "Not applied: " + loJsonOut.Emit()
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut
CANCEL
ENDIF
ENDIF
* One entry per placeholder: the pages it was found on and how many times it was replaced.
i = 0
lnCount_i = loJsonOut.SizeOfArray("replacements")
DO WHILE i < lnCount_i
loJsonOut.I = i
? loJsonOut.StringOf("replacements[i].field") + ": " + STR(loJsonOut.IntOf("replacements[i].count")) + " on page(s) " + loJsonOut.StringOf("replacements[i].pages")
i = i + 1
ENDDO
* The replacements stay in memory until the PDF is written.
lnSuccess = loPdf.WriteFile("qa_output/invoice_filled.pdf")
IF (lnSuccess = 0) THEN
? loPdf.LastErrorText
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut
CANCEL
ENDIF
? "Wrote qa_output/invoice_filled.pdf"
* Sample output:
* customer: 2 on page(s) 1
* date: 1 on page(s) 1
* po: 1 on page(s) 1
* qty1: 1 on page(s) 1
* desc1: 1 on page(s) 1
* price1: 1 on page(s) 1
* amount1: 1 on page(s) 1
* qty2: 1 on page(s) 1
* desc2: 1 on page(s) 1
* price2: 1 on page(s) 1
* amount2: 1 on page(s) 1
* subtotal: 1 on page(s) 1
* taxRate: 1 on page(s) 1
* tax: 1 on page(s) 1
* total: 1 on page(s) 1
* Wrote qa_output/invoice_filled.pdf
RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut