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

A PDF Watermark That Only Appears When Printed

See more PDF Watermark Examples

Demonstrates a watermark that is invisible on screen and appears on paper, which is what a "printed copies are uncontrolled" marking needs. Two approaches can do it: an optional-content layer with layer.view off and layer.print on, which also gives the reader an entry in the layers panel of the viewer (layer.locked stops them switching it), and a Watermark annotation with annotation.view false and annotation.print true. annotation.fixedPrint keeps the printed size and position the same whatever paper it goes on.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loPdf
LOCAL loJson
LOCAL loJsonOut
LOCAL loPdf2
LOCAL loJson2

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 two_page_memo.pdf

loPdf = CreateObject('Chilkat.Pdf')
lnSuccess = loPdf.LoadFile("qa_data/pdf/two_page_memo.pdf")
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    CANCEL
ENDIF

loJson = CreateObject('Chilkat.JsonObject')
loJson.UpdateString("type","text")
loJson.UpdateString("text","UNCONTROLLED WHEN PRINTED")
loJson.UpdateString("id","printonly")

*  As a layer: off on screen, on when printing, and locked so the reader cannot switch it on.
loJson.UpdateString("approach","layer")
loJson.UpdateString("layer.name","Print marking")
loJson.UpdateString("layer.view","off")
loJson.UpdateString("layer.print","on")
loJson.UpdateBool("layer.locked",1)

loJson.UpdateString("rotation","diagonal")
loJson.UpdateString("scale.fit","page")
loJson.UpdateNumber("scale.fitPercent","70")
loJson.UpdateNumber("opacity","0.3")

loJsonOut = CreateObject('Chilkat.JsonObject')
lnSuccess = loPdf.Watermark("add",loJson,loJsonOut)
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    CANCEL
ENDIF

? "layer id: " + loJsonOut.StringOf("id") + " pages: " + loJsonOut.StringOf("pages")

lnSuccess = loPdf.WriteFile("qa_output/memo_print_only.pdf")
IF (lnSuccess = 0) THEN
    ? loPdf.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    CANCEL
ENDIF

*  The same thing as an annotation instead.
loPdf2 = CreateObject('Chilkat.Pdf')
lnSuccess = loPdf2.LoadFile("qa_data/pdf/two_page_memo.pdf")
IF (lnSuccess = 0) THEN
    ? loPdf2.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    RELEASE loPdf2
    CANCEL
ENDIF

loJson2 = CreateObject('Chilkat.JsonObject')
loJson2.UpdateString("type","text")
loJson2.UpdateString("text","UNCONTROLLED WHEN PRINTED")
loJson2.UpdateString("id","printonly2")
loJson2.UpdateString("approach","annotation")
loJson2.UpdateBool("annotation.view",0)
loJson2.UpdateBool("annotation.print",1)
loJson2.UpdateBool("annotation.fixedPrint",1)
loJson2.UpdateString("rotation","diagonal")
lnSuccess = loPdf2.Watermark("add",loJson2,loJsonOut)
IF (lnSuccess = 0) THEN
    ? loPdf2.LastErrorText
    RELEASE loPdf
    RELEASE loJson
    RELEASE loJsonOut
    RELEASE loPdf2
    RELEASE loJson2
    CANCEL
ENDIF

? "annotation id: " + loJsonOut.StringOf("id")

*  Sample output:

*  layer id: printonly pages: 1-2
*  annotation id: printonly2

RELEASE loPdf
RELEASE loJson
RELEASE loJsonOut
RELEASE loPdf2
RELEASE loJson2