最近因爲項目需要,加入了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();