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();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章