我正在尝试为页面添加背景颜色。 我的页面尺寸为1/3英寸,页面顶部,左侧,右侧。底部边距为1英寸。
Rectangle a4 = PageSize.A4;
a4.setBackgroundColor(BaseColor.CYAN);
Document document = new Document(a4,24,24,24,72);
背景颜色适用于所有页面。我想将它应用于页面内容,不包括边距空间。
答案 0 :(得分:1)
您需要使用PdfPageEvent
来实现这一目标。看看这个问题的答案:Change the color of pdf pages alternatively using iText pdf in java
在此示例中,我们创建了一个覆盖整页的彩色背景:
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();
}
}
现在让我们改编一下这个例子:
public class Background extends PdfPageEventHelper {
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte canvas = writer.getDirectContentUnder();
Rectangle rect = document.getPageSize();
canvas.setColorFill(BaseColor.BLUE);
canvas.rectangle(rect.getLeft() + 36, rect.getBottom() + 36, rect.getWidth() - 72, rect.getHeight() - 72);
canvas.fill();
}
}
通过更改rectangle()
方法的参数,我们在每一方都引入了36个用户单位的边距。
显然,您需要将页面事件声明为PdfWriter
:
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
Background event = new Background();
writer.setPageEvent(event);