首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OpenPDF在每一页上显示矩形页眉和页脚块

使用OpenPDF在每一页上显示矩形页眉和页脚块
EN

Stack Overflow用户
提问于 2020-11-24 13:33:12
回答 1查看 344关注 0票数 3

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

代码语言:javascript
复制
HeaderFooter header = new HeaderFooter(new Phrase("This is a Header."), false);

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

这是我在每一页上所期待的:

EN

回答 1

Stack Overflow用户

发布于 2021-07-19 01:39:38

您可以通过创建自定义事件(onEndPage- PdfPageEvent )来实现这一点,只要新页面完成,您就可以在其中添加元素。要做到这一点,最简单的方法是在独立类或匿名类中扩展PdfPageEventHelper。首先,定义并定义矩形的样式。其次,使用回调中的PdfWriter将它们添加到页面。

这是一个演示如何做到这一点的演示:

代码语言:javascript
复制
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();

结果如下所示:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64980765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档