或者在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