Change the color of pdf pages alternatively using iText pdf in java

前端 未结 1 1965
醉话见心
醉话见心 2020-12-10 23:08

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

相关标签:
1条回答
  • 2020-12-10 23:25

    This is a follow-up question of How can I add page background color of pdf using iText in java

    While the advice given in the answer to that question works, it's not the best advice you could get. If I had seen your original question earlier, I would have answered it differently. I would have recommended you to use page events, as is done in 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

    How is this achieved? Well, using the same technique as used in my answer to this related question: How to draw border for whole pdf pages using iText library 5.5.2

    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.

    0 讨论(0)
提交回复
热议问题