AutoIt Requires Chilkat v11.7.0+
AutoIt
Why a PDF Text Replacement Is Refused: the Font Rule
See more PDF Text Replacement Examples
A PDF stores glyphs drawn with particular fonts, so new text can only be drawn when the original font can draw it. This example shows the two common refusals. A font embedded as a subset carries only the glyphs the document used: a value made of other characters is refused with the reason missingGlyph, and the report names the font and the characters it lacks. A font that is neither one of the standard 14 nor embedded (here Verdana) is refused with nonStandardUnembeddedFont, because Chilkat cannot know what a viewer will draw for it. A non-embedded Arial, Times New Roman or Courier New is treated as the standard font every viewer substitutes for it.Chilkat AutoIt Downloads
Local $bSuccess = False
; 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 quote_subset_font.pdf
; and letter_verdana.pdf
; 1. An embedded subset font: only the glyphs the document uses are in the PDF.
$oPdf = ObjCreate("Chilkat.Pdf")
$bSuccess = $oPdf.LoadFile("qa_data/pdf/quote_subset_font.pdf")
If ($bSuccess = False) Then
ConsoleWrite($oPdf.LastErrorText & @CRLF)
Exit
EndIf
$oJson = ObjCreate("Chilkat.JsonObject")
$oJsonOut = ObjCreate("Chilkat.JsonObject")
; The regular face's subset carries the characters of the quotation's text, among them the digits of
; "58341". A new number made of those digits can be drawn...
$oJson.UpdateString("labels[0].label","Quote #:")
$oJson.UpdateString("labels[0].value","58314")
$bSuccess = $oPdf.TextReplace("check",$oJson,$oJsonOut)
If ($bSuccess = False) Then
ConsoleWrite($oPdf.LastErrorText & @CRLF)
Exit
EndIf
ConsoleWrite("58314: ok = " & $oJsonOut.BoolOf("ok") & @CRLF)
; ...but "Q" and "-" are not in the subset (nothing in the quotation's regular text uses them).
$oJson.UpdateString("labels[0].value","Q-58341")
$bSuccess = $oPdf.TextReplace("check",$oJson,$oJsonOut)
If ($bSuccess = False) Then
ConsoleWrite($oPdf.LastErrorText & @CRLF)
Exit
EndIf
ConsoleWrite("Q-58341: ok = " & $oJsonOut.BoolOf("ok") & @CRLF)
If ($oJsonOut.BoolOf("ok") = False) Then
; The problem names the font and the characters it cannot draw.
ConsoleWrite(" reason: " & $oJsonOut.StringOf("problems[0].reason") & @CRLF)
ConsoleWrite(" font: " & $oJsonOut.StringOf("problems[0].font") & @CRLF)
ConsoleWrite(" missing: " & $oJsonOut.StringOf("problems[0].chars") & @CRLF)
EndIf
; "apply" with a problem returns false and changes nothing.
$bSuccess = $oPdf.TextReplace("apply",$oJson,$oJsonOut)
ConsoleWrite("apply returned " & $bSuccess & ", applied = " & $oJsonOut.BoolOf("applied") & @CRLF)
; 2. A font that is not embedded and not one of the standard 14.
$oPdf2 = ObjCreate("Chilkat.Pdf")
$bSuccess = $oPdf2.LoadFile("qa_data/pdf/letter_verdana.pdf")
If ($bSuccess = False) Then
ConsoleWrite($oPdf2.LastErrorText & @CRLF)
Exit
EndIf
$oJson2 = ObjCreate("Chilkat.JsonObject")
$oJson2.UpdateString("labels[0].label","Account Number:")
$oJson2.UpdateString("labels[0].value","0000099999")
$bSuccess = $oPdf2.TextReplace("check",$oJson2,$oJsonOut)
If ($bSuccess = False) Then
ConsoleWrite($oPdf2.LastErrorText & @CRLF)
Exit
EndIf
ConsoleWrite("Verdana, not embedded: ok = " & $oJsonOut.BoolOf("ok") & ", reason: " & $oJsonOut.StringOf("problems[0].reason") & ", font: " & $oJsonOut.StringOf("problems[0].font") & @CRLF)
; Sample output:
; 58314: ok = true
; Q-58341: ok = false
; reason: missingGlyph
; font: AAAAAA+DejaVuSans
; missing: Q-
; apply returned false, applied = false
; Verdana, not embedded: ok = false, reason: nonStandardUnembeddedFont, font: Verdana