使用OpenPDF在每一页上显示矩形页眉和页脚挡路 [英] Rectangular header and footer block on every page of PDF using OpenPDF

查看:41
本文介绍了使用OpenPDF在每一页上显示矩形页眉和页脚挡路的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用OpenPDF生成PDF发票报告。在pdf上,我必须为每一页的页眉/页脚设置一个矩形挡路。我已经使用HeaderFooter类在每个页面上添加页眉/页脚,但这只对Phrase有效。

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

有没有办法使用HeaderFooter类设置具有页眉/页脚高度和宽度的矩形挡路?

这是我在每个页面上期待的:

事件

您可以通过创建自定义PdfPageEvent来实现这一点,只要新页面完成(onEndPage-推荐答案),您就可以在其中添加元素。最简单的方法是在独立类或匿名类中扩展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();

结果如下:

这篇关于使用OpenPDF在每一页上显示矩形页眉和页脚挡路的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆