How to change the color of pages?

Category: 
Tags: page eventsbackgroundcolorpage coloriText 5

I'm creating report based on client activity. I'm creating this report with the help of the iText PDF library. I want to create the first two pages with a blue background color (for product name and disclaimer notes) and the remaining pages in white (without a background color). I colored two pages at the very beginning of report with blue using following code.

Rectangle pageSize = new Rectangle(PageSize.A4);
pageSize.setBackgroundColor(new BaseColor(84, 141, 212));
Document document = new Document( pageSize );
But when I move to 3rd page using document.newpage(), the page is still in blue. I can't change the color of 3rd page. I want to change the color of 3rd page onward to white. How can I do this using iText?

Posted on StackOverflow on May 13, 2015 by Arun jk

Please take a look at the PageBackgrounds example. In this example, I create a blue background for page 1 and 2, and a grey background for all the subsequent even pages. See page_backgrounds.pdf

To achieve this, I create a page event like this:

public class Background extends PdfPageEventHelper {
    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        int pagenumber = writer.getPageNumber();
        if (pagenumber % 2 == 1 && pagenumber != 1)
            return;
        PdfContentByte canvas = writer.getDirectContentUnder();
        Rectangle rect = document.getPageSize();
        canvas.setColorFill(pagenumber < 3 ?
            BaseColor.BLUE : BaseColor.LIGHT_GRAY);
        canvas.rectangle(rect.getLeft(), rect.getBottom(),
            rect.getWidth(), rect.getHeight());
        canvas.fill();
    }
}

As you can see, I first check for the page number. If it's an odd number and if it's not equal to 1, I don't do anything.

However, if I'm on page 1 or 2, or if the page number is even, I get the content from the writer, and I get the dimension of the page from the document. I then set the fill color to either blue or light gray (depending on the page number), and I construct the path for a rectangle that covers the complete page. Finally, I fill that rectangle with the fill color.

Now that we've got our custom Background event, we can use it like this:

PdfWriter writer =
    PdfWriter.getInstance(document, new FileOutputStream(filename));
Background event = new Background();
writer.setPageEvent(event);

Feel free to adapt the Background class if you need a different behavior.