我正在使用 OpenPDF 生成 PDF 发票报告。在 PDF 上,我必须在每一页上为页眉/页脚设置一个矩形块。我已经使用HeaderFooter
该类在每个页面上添加页眉/页脚,但这仅适用于Phrase
.
HeaderFooter header = new HeaderFooter(new Phrase("This is a Header."), false);
有没有办法使用HeaderFooter
类为页眉/页脚设置一个具有高度和宽度的矩形块?
这是我对每一页的期望:
我正在使用 OpenPDF 生成 PDF 发票报告。在 PDF 上,我必须在每一页上为页眉/页脚设置一个矩形块。我已经使用HeaderFooter
该类在每个页面上添加页眉/页脚,但这仅适用于Phrase
.
HeaderFooter header = new HeaderFooter(new Phrase("This is a Header."), false);
有没有办法使用HeaderFooter
类为页眉/页脚设置一个具有高度和宽度的矩形块?
这是我对每一页的期望:
您可以通过创建自定义来做到这一点,您可以PdfPageEvent
在新页面完成时添加元素(onEndPage -event)。最简单的方法是PdfPageEventHelper
在独立类或匿名类中扩展。首先,定义矩形并设置样式。PdfWriter
其次,使用内部回调将它们添加到页面。
这是一个演示如何做到这一点的演示:
Document document = new Document(PageSize.A4, 40, 40, 200, 200);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
// footer
final Rectangle footer = new Rectangle(30, 30, PageSize.A4.getRight(30), 180);
footer.setBorder(Rectangle.BOX);
footer.setBorderColor(Color.BLACK);
footer.setBorderWidth(2);
// header
final Rectangle header = new Rectangle(footer);
header.setTop(PageSize.A4.getTop(30));
header.setBottom(PageSize.A4.getTop(180));
// content-box
final Rectangle box = new Rectangle(footer);
box.setTop(document.top());
box.setBottom(document.bottom());
// create and register page event to add the rectangles
writer.setPageEvent(new PdfPageEventHelper() {
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte cb = writer.getDirectContent();
cb.rectangle(header);
cb.rectangle(footer);
cb.rectangle(box);
}
});
document.open();
document.add(new Paragraph(LOREM_IPSUM)); // just some constant filler text
document.close();
结果如下所示: