iText 5

How to add a rectangle to every page of a document? | iText 5 PDF Development Guide

Why does my code only add the rectangle on the last page?


I'm using iText to create a PDF document. Right now I am trying to get a rectangle on every single page of the document but I'm not sure how to do this. I tried adding this at the end of my code:


PdfContentByte cb = writer.getDirectContent(); for (int pgCnt = 1; pgCnt writer.getPageNumber(); pgCnt++) { cb.saveState(); cb.setColorStroke(new CMYKColor(1f, 0f, 0f, 0f)); cb.setColorFill(new CMYKColor(1f, 0f, 0f, 0f)); cb.rectangle(20,10,10,820); cb.fill(); cb.restoreState(); }

but this only adds the rectangle on the last page and it kind of make sense because I'm not using the pgCnt anywhere. How can I specify that I want the rectangle on page number pgCnt, so I can add the rectangle on every page?

Posted on StackOverflow on Mar 19, 2013 by Carla Stabille

Please take a look at the entries for the tag Page events - iText 5 Documentation. You'll discover that you need to extend the PdfPageEventHelper class and add your code to the onEndPage() method.

public void onEndPage(PdfWriter writer, Document document) { PdfContentByte cb = writer.getDirectContent(); cb.saveState(); cb.setColorStroke(new CMYKColor(1f, 0f, 0f, 0f)); cb.setColorFill(new CMYKColor(1f, 0f, 0f, 0f)); cb.rectangle(20,10,10,820); cb.fill(); cb.restoreState(); }

Create an instance of your custom page event class, and declare it to the writer before opening the document:

writer.setPageEvent(myPageEventInstance);

Now your rectangle will be drawn on every page, on top of the existing content. If you want the rectangle under the existing content: replace getDirectContent() with getDirectContentUnder().