Sample code for 30+ languages & platforms
B4X 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 B4X Downloads

B4X
Dim success As Boolean = 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 two_page_memo.pdf

Dim pdf As ChilkatPdf
pdf.Initialize("pdf")
success = pdf.LoadFile("qa_data/pdf/two_page_memo.pdf")
If success = False Then
    Log(pdf.LastErrorText)
    Return
End If


Dim json As ChilkatJsonObject
json.Initialize
json.UpdateString("type", "text")
json.UpdateString("text", "UNCONTROLLED WHEN PRINTED")
json.UpdateString("id", "printonly")

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

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

Dim jsonOut As ChilkatJsonObject
jsonOut.Initialize
success = pdf.Watermark("add", json, jsonOut)
If success = False Then
    Log(pdf.LastErrorText)
    Return
End If

Log("layer id: " & jsonOut.StringOf("id") & " pages: " & jsonOut.StringOf("pages"))

success = pdf.WriteFile("qa_output/memo_print_only.pdf")
If success = False Then
    Log(pdf.LastErrorText)
    Return
End If


'  The same thing as an annotation instead.
Dim pdf2 As ChilkatPdf
pdf2.Initialize("pdf2")
success = pdf2.LoadFile("qa_data/pdf/two_page_memo.pdf")
If success = False Then
    Log(pdf2.LastErrorText)
    Return
End If

Dim json2 As ChilkatJsonObject
json2.Initialize
json2.UpdateString("type", "text")
json2.UpdateString("text", "UNCONTROLLED WHEN PRINTED")
json2.UpdateString("id", "printonly2")
json2.UpdateString("approach", "annotation")
json2.UpdateBool("annotation.view", False)
json2.UpdateBool("annotation.print", True)
json2.UpdateBool("annotation.fixedPrint", True)
json2.UpdateString("rotation", "diagonal")
success = pdf2.Watermark("add", json2, jsonOut)
If success = False Then
    Log(pdf2.LastErrorText)
    Return
End If

Log("annotation id: " & jsonOut.StringOf("id"))

'  Sample output:

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