Page events for Watermarking

31st May 2016
iText PDF

Switch code for this example

    This file is part of the iText (R) project.
    Copyright (c) 1998-2016 iText Group NV


 * Example written by Bruno Lowagie in answer to:

* Adding a watermark to the document immediately using a page event. */ package; import; import com.itextpdf.kernel.color.Color; import; import; import; import com.itextpdf.kernel.font.PdfFont; import com.itextpdf.kernel.font.PdfFontFactory; import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfPage; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.layout.Canvas; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Cell; import com.itextpdf.layout.element.Paragraph; import com.itextpdf.layout.element.Table; import; import; import com.itextpdf.samples.GenericTest; import com.itextpdf.test.annotations.type.SampleTest; import org.junit.experimental.categories.Category; import; import; import; import; import java.util.StringTokenizer; @Category(SampleTest.class) public class Watermarking extends GenericTest { public static final String DATA = "./src/test/resources/data/united_states.csv"; public static final String DEST = "./target/test/resources/sandbox/events/watermarkings.pdf"; public static void main(String[] args) throws Exception { File file = new File(DEST); file.getParentFile().mkdirs(); new Watermarking().manipulatePdf(DEST); } public void process(Table table, String line, PdfFont font, boolean isHeader) { StringTokenizer tokenizer = new StringTokenizer(line, ";"); int c = 0; while (tokenizer.hasMoreTokens() && c++ < 3) { if (isHeader) { table.addHeaderCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font))); } else { table.addCell(new Cell().add(new Paragraph(tokenizer.nextToken()).setFont(font))); } } } @Override protected void manipulatePdf(String dest) throws Exception { PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST)); Document doc = new Document(pdfDoc); pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, new WatermarkingEventHandler()); PdfFont font = PdfFontFactory.createFont(FontConstants.HELVETICA); PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD); Table table = new Table(new float[]{4, 1, 3}); table.setWidthPercent(100); BufferedReader br = new BufferedReader(new FileReader(DATA)); String line = br.readLine(); process(table, line, bold, true); while ((line = br.readLine()) != null) { process(table, line, font, false); } br.close(); doc.add(table); doc.close(); } protected class WatermarkingEventHandler implements IEventHandler { @Override public void handleEvent(Event event) { PdfDocumentEvent docEvent = (PdfDocumentEvent) event; PdfDocument pdfDoc = docEvent.getDocument(); PdfPage page = docEvent.getPage(); PdfFont font = null; try { font = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD); } catch (IOException e) { e.printStackTrace(); } PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc); new Canvas(canvas, pdfDoc, page.getPageSize()) .setFontColor(Color.LIGHT_GRAY) .setFontSize(60) .setFont(font) .showTextAligned(new Paragraph("WATERMARK"), 298, 421, pdfDoc.getPageNumber(page), TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45); } } }


Still have questions? 

We're happy to answer your questions. Reach out to us and we'll get back to you shortly.

Contact us
Stay updated

Join 11,000+ subscribers and become an iText PDF expert by staying up to date with our new products, updates, tips, technical solutions and happenings.

Subscribe Now