我正在使用OpenPDF生成一个PDF发票报告。在PDF上,我必须为每一页的页眉/页脚设置一个矩形块。我使用HeaderFooter类在每个页面上添加页眉/页脚,但这只适用于Phrase。
HeaderFooter header = new HeaderFooter(new Phrase("This is a Header."), false);有没有办法使用HeaderFooter类为页眉/页脚设置高度和宽度的矩形块?
这是我在每一页上所期待的:

发布于 2021-07-19 01:39:38
您可以通过创建自定义事件(onEndPage- PdfPageEvent )来实现这一点,只要新页面完成,您就可以在其中添加元素。要做到这一点,最简单的方法是在独立类或匿名类中扩展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();结果如下所示:

https://stackoverflow.com/questions/64980765
复制相似问题