或者在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(),该页面仍为蓝色。我无法更改第三页的颜色。我想将第三页的颜色更改为白色。如何使用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如果您需要其他行为,请随时适应课程。

以上是 或者在Java中使用iText pdf更改pdf页面的颜色 的全部内容, 来源链接: utcz.com/qa/423610.html

回到顶部