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

 

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