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