/** * This example was written by Bruno Lowagie in answer to a question by a customer. */ package sandbox.stamper; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.Font.FontFamily; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.ColumnText; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfGState; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.PdfStamper; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import sandbox.WrapToTest; @WrapToTest public class TransparentWatermark { public static final String SRC = "resources/pdfs/hero.pdf"; public static final String DEST = "results/stamper/hero_watermarked.pdf"; public static void main(String[] args) throws IOException, DocumentException { File file = new File(DEST); file.getParentFile().mkdirs(); new TransparentWatermark().manipulatePdf(SRC, DEST); } public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); PdfContentByte under = stamper.getUnderContent(1); Font f = new Font(FontFamily.HELVETICA, 15); Phrase p = new Phrase("This watermark is added UNDER the existing content", f); ColumnText.showTextAligned(under, Element.ALIGN_CENTER, p, 297, 550, 0); PdfContentByte over = stamper.getOverContent(1); p = new Phrase("This watermark is added ON TOP OF the existing content", f); ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 297, 500, 0); p = new Phrase("This TRANSPARENT watermark is added ON TOP OF the existing content", f); over.saveState(); PdfGState gs1 = new PdfGState(); gs1.setFillOpacity(0.5f); over.setGState(gs1); ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 297, 450, 0); over.restoreState(); stamper.close(); reader.close(); } }