Objective-C Requires Chilkat v11.7.0+
Objective-C
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 Objective-C Downloads
#import <CkoPdf.h>
#import <CkoJsonObject.h>
BOOL success = NO;
// 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
CkoPdf *pdf = [[CkoPdf alloc] init];
success = [pdf LoadFile: @"qa_data/pdf/invoice_template.pdf"];
if (success == NO) {
NSLog(@"%@",pdf.LastErrorText);
return;
}
// Values for every placeholder except {{po}} (the purchase order number, which this customer has none of).
CkoJsonObject *json = [[CkoJsonObject alloc] init];
[json UpdateString: @"placeholders.customer" value: @"Acme Corp"];
[json UpdateString: @"placeholders.date" value: @"2026-10-18"];
[json UpdateString: @"placeholders.qty1" value: @"2"];
[json UpdateString: @"placeholders.desc1" value: @"Cordless drill, 18 V"];
[json UpdateString: @"placeholders.price1" value: @"$460.00"];
[json UpdateString: @"placeholders.amount1" value: @"$920.00"];
[json UpdateString: @"placeholders.qty2" value: @"6"];
[json UpdateString: @"placeholders.desc2" value: @"Galvanized hinge, 4 inch"];
[json UpdateString: @"placeholders.price2" value: @"$12.50"];
[json UpdateString: @"placeholders.amount2" value: @"$75.00"];
[json UpdateString: @"placeholders.subtotal" value: @"$995.00"];
[json UpdateString: @"placeholders.taxRate" value: @"7.35%"];
[json UpdateString: @"placeholders.tax" value: @"$73.13"];
[json UpdateString: @"placeholders.total" value: @"$1,068.13"];
CkoJsonObject *jsonOut = [[CkoJsonObject alloc] init];
// The default, "error": the unfilled {{po}} is a problem and nothing would be applied.
success = [pdf TextReplace: @"check" jsonIn: json jsonOut: jsonOut];
if (success == NO) {
NSLog(@"%@",pdf.LastErrorText);
return;
}
NSLog(@"%@%d%@%@%@%@",@"error (default): ok = ",[jsonOut BoolOf: @"ok"],@", problem: ",[jsonOut StringOf: @"problems[0].field"],@" ",[jsonOut StringOf: @"problems[0].reason"]);
// "keep": {{po}} stays on the page, literally.
[json UpdateString: @"unusedPlaceholders" value: @"keep"];
success = [pdf TextReplace: @"check" jsonIn: json jsonOut: jsonOut];
if (success == NO) {
NSLog(@"%@",pdf.LastErrorText);
return;
}
NSLog(@"%@%d",@"keep: ok = ",[jsonOut BoolOf: @"ok"]);
// "blank": {{po}} is replaced by nothing, leaving "PO Number:" with an empty value.
[json UpdateString: @"unusedPlaceholders" value: @"blank"];
success = [pdf TextReplace: @"apply" jsonIn: json jsonOut: jsonOut];
if (success == NO) {
NSLog(@"%@",pdf.LastErrorText);
return;
}
NSLog(@"%@%d",@"blank: applied = ",[jsonOut BoolOf: @"applied"]);
success = [pdf WriteFile: @"qa_output/invoice_no_po.pdf"];
if (success == NO) {
NSLog(@"%@",pdf.LastErrorText);
return;
}
// Sample output:
// error (default): ok = false, problem: po unusedPlaceholder
// keep: ok = true
// blank: applied = true