在java中使用iText pdf替换pdf页面的颜色

时间:2015-05-13 09:40:17

标签: java itextpdf

我根据客户活动创建报告。 我是在iText PDF库的帮助下创建此报告的。 我想用蓝色背景颜色创建前两页(产品名称和免责声明) 其余页面为白色(没有背景色)。 我在报告的最开始用蓝色使用以下代码着色了两页。

Rectangle pageSize = new Rectangle(PageSize.A4);
pageSize.setBackgroundColor(new BaseColor(84, 141, 212));
Document document = new Document( pageSize );

但是当我使用document.newpage()移至第3页时,页面仍为蓝色。 我无法改变第3页的颜色。我想将第3页的颜色改为白色。 我怎么能用iText做到这一点?

1 个答案:

答案 0 :(得分:1)

这是How can I add page background color of pdf using iText in java

的后续问题

虽然在回答这个问题时给出的建议有效,但这不是你能得到的最佳建议。如果我之前看过你原来的问题,我会以不同的方式回答。我建议你使用页面事件,就像PageBackgrounds示例中所做的那样。

在此示例中,我为第1页和第2页创建了蓝色背景,为所有后续偶数页创建了灰色背景。见page_backgrounds.pdf

这是如何实现的?好吧,使用我对这个相关问题的回答中使用的相同技术:How to draw border for whole pdf pages using iText library 5.5.2

我创建了一个像这样的页面事件:

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();
    }
}

如您所见,我首先检查页码。如果它是一个奇数,如果它不等于1,我什么都不做。

但是,如果我在第1页或第2页,或者页码是偶数,我会从writer获取内容,并从document获取页面的维度。然后我将填充颜色设置为蓝色或浅灰色(取决于页码),然后构建覆盖整个页面的矩形的路径。最后,我用填充颜色填充该矩形。

现在我们已经获得了自定义Background事件,我们可以像这样使用它:

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

如果您需要不同的行为,请随意调整Background课程。