3

我正在使用 OpenPDF 生成 PDF 发票报告。在 PDF 上,我必须在每一页上为页眉/页脚设置一个矩形块。我已经使用HeaderFooter该类在每个页面上添加页眉/页脚,但这仅适用于Phrase.

HeaderFooter header = new HeaderFooter(new Phrase("This is a Header."), false);

有没有办法使用HeaderFooter类为页眉/页脚设置一个具有高度和宽度的矩形块?

这是我对每一页的期望:

预期产出

4

1 回答 1

4

您可以通过创建自定义来做到这一点,您可以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();

结果如下所示:

结果

于 2021-07-18T17:39:38.473 回答