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

Check a PDF Text Replacement Before Applying It

See more PDF Text Replacement Examples

Demonstrates the "check" operation, which finds every placeholder and label and applies the font rule but changes nothing, and how to read its report: "ok" says whether "apply" would succeed, "replacements" lists what would be replaced, and "problems" lists what prevents it, each with a reason. Here the first check fails because a placeholder on the page was given no value; the value is added and the check passes, and only then is "apply" called.

Chilkat Visual FoxPro Downloads

Visual FoxPro
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

*  Values for most of the template's placeholders -- but not {{po}}, {{qty2}}, {{desc2}}, {{price2}} or {{amount2}}.
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.subtotal","$920.00")
loJson.UpdateString("placeholders.taxRate","7.35%")
loJson.UpdateString("placeholders.tax","$67.62")
loJson.UpdateString("placeholders.total","$987.62")

*  "check" reports what "apply" would do, without changing the PDF.
loJsonOut = CreateObject('Chilkat.JsonObject')
lnSuccess = loPdf.TextReplace("check",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    CANCEL
ENDIF

? "ok: " + STR(loJsonOut.BoolOf("ok"))
? "would replace: " + STR(loJsonOut.SizeOfArray("replacements")) + " placeholders"

*  Each problem names the placeholder (field) or label, and a reason:
*    notFound - the placeholder or label is not on the selected pages
*    unusedPlaceholder - a placeholder on the page was given no value
*    missingGlyph, notInEncoding, nonStandardUnembeddedFont, unsupportedFont - the font rule
*    placeholderSpansFonts - the text is drawn with more than one font or size
i = 0
lnCount_i = loJsonOut.SizeOfArray("problems")
DO WHILE i < lnCount_i
    loJsonOut.I = i
    ? "problem: " + loJsonOut.StringOf("problems[i].field") + loJsonOut.StringOf("problems[i].label") + " - " + loJsonOut.StringOf("problems[i].reason") + " (page " + STR(loJsonOut.IntOf("problems[i].page")) + ")"
    i = i + 1
ENDDO

*  Give the missing placeholders their values and check again.
loJson.UpdateString("placeholders.po","PO-88213")
loJson.UpdateString("placeholders.qty2","0")
loJson.UpdateString("placeholders.desc2","(no second item)")
loJson.UpdateString("placeholders.price2","")
loJson.UpdateString("placeholders.amount2","")
lnSuccess = loPdf.TextReplace("check",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    CANCEL
ENDIF

? "ok after adding the values: " + STR(loJsonOut.BoolOf("ok"))

*  Now apply.
IF (loJsonOut.BoolOf("ok") = 1) THEN
    lnSuccess = loPdf.TextReplace("apply",loJson,loJsonOut)
    IF (lnSuccess = 0) THEN
        ? loPdf.LastErrorText
        RELEASE loPdf
        RELEASE loJson
        RELEASE loJsonOut
        CANCEL
    ENDIF

    ? "applied: " + STR(loJsonOut.BoolOf("applied"))
    lnSuccess = loPdf.WriteFile("qa_output/invoice_checked.pdf")
    IF (lnSuccess = 0) THEN
        ? loPdf.LastErrorText
        RELEASE loPdf
        RELEASE loJson
        RELEASE loJsonOut
        CANCEL
    ENDIF

ENDIF

*  Sample output:

*  ok: false
*  would replace: 10 placeholders
*  problem: po - unusedPlaceholder (page 1)
*  problem: qty2 - unusedPlaceholder (page 1)
*  problem: desc2 - unusedPlaceholder (page 1)
*  problem: price2 - unusedPlaceholder (page 1)
*  problem: amount2 - unusedPlaceholder (page 1)
*  ok after adding the values: true
*  applied: true

RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut