IText5 怎么设置页眉页脚

最近因为项目需要,加入了iText5来进行PDF的预览导出,功能已经处理完,开始根据项目中实际用到的一些功能进行总结

长话短说,有时间的可以去官网看看相关示例,还是很有帮助的,大部分的问题都可以在官方的demo中找到解决方案

官方页眉页脚示例地址:https://itextpdf.com/en/resources/examples/itext-5-legacy/page-events-headers-and-footers

设置页眉(我这里主要使用的是表格样式页眉页脚,因为比较好扩展,以及调整样式):

public class HeaderHandle extends PdfPageEventHelper {

    /**
     * 表格式页眉
     */
    protected PdfPTable headerTable;

    public HeaderHandle(PdfPTable headerTable) {
        this.headerTable = headerTable;
    }

    public void setHeaderTable(PdfPTable headerTable) {
        this.headerTable = headerTable;
    }

    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        // rowEnd为-1 表示写入所有行
        headerTable.writeSelectedRows(0, -1, document.left()+document.leftMargin()/2, document.top() + headerTable.getTotalHeight(), writer.getDirectContent());
    }
}

设置页脚:

public class FooterHandle extends PdfPageEventHelper {
    /**
     * 页脚table
     */
    protected PdfPTable footer;

    /**
     * 页脚的高度
     */
    protected float height = 20;

    public FooterHandle(){

    }

    public FooterHandle(PdfPTable footer) {
        this.footer = footer;
    }

    public FooterHandle(PdfPTable footer, float height) {
        this.footer = footer;
        this.height = height;
    }

    public void setFooter(PdfPTable footer) {
        this.footer = footer;
    }

    public void setHeight(float height) {
        this.height = height;
    }

    @Override
    public void onStartPage(PdfWriter writer, Document document) {
        super.onStartPage(writer, document);
    }

    @SneakyThrows
    @Override
    public void onEndPage(PdfWriter writer, Document document) {
        footer.writeSelectedRows(0, -1, document.left()+document.leftMargin()/2, document.bottom()-height, writer.getDirectContent());
    }
}

使用实例(重要部分提取出来):

// 因为我们表格比较宽,所以是横向的A4纸,rotate进行旋转
Document doc = new Document(PageSize.A4.rotate(),30,30,50,80);
PdfWriter writer = PdfWriter.getInstance(doc, response.getOutputStream());
// 1、页眉 (因为我的很多表单页眉都是统一的,显示单号 单号条形码 和制单时间,所以公共的地方提取出来相对简单)
PdfPTable header = common.makeHeader(obj.getNo(),obj.getCreateTime());
writer.setPageEvent(new HeaderHandle(header));
// 2、页脚
PdfPTable footerTable = new PdfPTable(6);
int[] footerWidth = {35,40,50,35,40,50};
footerTable.setWidths(footerWidth);
footerTable.setFooterRows(1);
footerTable.setWidthPercentage(98);
FooterHandle footerEvent = new FooterHandle(common.makeFooter(obj,footerTable));
writer.setPageEvent(footerEvent);
doc.open();

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值