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

我正在根据客户活动创建报告。 我是在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做到这一点?

这是一个后续问题如何在java中使用iText添加pdf的页面背景颜色

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

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

这是如何实现的? 那么,使用与我对这个相关问题的答案中使用的相同的技术: 如何使用iText库5.5.2绘制整个pdf页面的边框

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

 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类。