2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > iText5添加页眉 页脚 logo 页码等实现

iText5添加页眉 页脚 logo 页码等实现

时间:2018-12-24 09:32:47

相关推荐

iText5添加页眉 页脚 logo 页码等实现

iText5添加页眉、页脚,logo、页码等实现

iText5添加页眉、页脚版本及maven依赖PdfHeaderFooterEventPdfTest

iText5添加页眉、页脚

iText5添加页眉和页脚通过事件出发,需要继承PdfPageEventHelper,重写onEndPage方法进行处理,然后setPageEvent到PdfWriter。

以下边的页眉页脚为例:

页眉: 左边为logo,右边报告简称;

页脚:左边为导出人名,中间为页码,右边为导出日期;

将页眉和页脚都放在在表格里边,然后页眉仅显示底部边框,页脚仅显示顶部边框,做到分割线的作用。

注意点就是总页码,总页码是动态,只有到了写完整个文档,才能知道总页码,所以需要使用PdfTemplate,在页面关闭事件,写入到模板对象里。

版本及maven依赖

PdfHeaderFooterEvent

@Slf4jpublic class PdfHeaderFooterEvent extends PdfPageEventHelper {private final static String FONT_PATH = "C:\Windows\Fonts\simsun.ttc,0";private final static BaseFont BASE_FONT = BaseFont.createFont(FONT_PATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);private final static String logoPath = "D:\Users\admin\Downloads\logo.png";//总页码使用的模板对象public PdfTemplate totalNumTemplate = null;/*** 重写页面结束时间 分别添加页眉、页脚*/@Overridepublic void onEndPage(pdfWriter writer, Document docment){try{this.addPageHeader(writer, docment);}catch(Exception e){log.error("添加页眉出错", e);}try{this.addPageFooter(writer, docment);}catch(Exception e){log.error("添加页脚出错", e);}}/*** 页眉*/private void addPageHeader(pdfWriter writer, Document docment){//创建字体Font textFont = new Font(BASE_FONT, 10f);//两列 一列logo 一列项目简称PdfTable table = new PdfTable(2);//设置表格宽度 A4纸宽度减去两个边距 比如我一边30 所以减去60table.setTotalWidth(PageSize.A4.getWidth()-60);//logo//创建图片对象Image logo = Image.getInstance(logoPath);//创建一个Phrase对象 再添加一个Chunk对象进去 Chunk里边是图片Phrase logoP = new Phrase("", textFont);//自己调整偏移值 主要是y轴值logoP.add(new Chunk(logo, 0, -35))PdfPCell logoCell = new PdfPCell(logoP);//只保留底部边框和设置高度logoCell.disableBorderSide(13);logoCell.setFixedHeight(40);table.addCell(logoCell);Phrase nameP = new Phrase("TEST", textFont);PdfPCell nameCell = new PdfPCell(nameP);//只保留底部边框和设置高度 设置水平居右和垂直居中nameCell.disableBorderSide(13);nameCell.setFixedHeight(40);nameCell.setHorizontalAlignment(Element.ALIGN_RIGHT);nameCell.setVerticalAlignment(Element.ALIGN_MIDDLE);table.addCell(logoCell);//再把表格写到页眉处 使用绝对定位table.writeSelectedRows(0, -1, 30, Page.A4.getHeight()-20, write.getDirectContent());}/*** 页脚*/private void addPageFooter(PdfWriter writer, Document docment){//创建字体Font textFont = new Font(BASE_FONT, 10f);//三列 一列导出人 一列页码 一列时间PdfTable table = new PdfTable(3);//设置表格宽度 A4纸宽度减去两个边距 比如我一边30 所以减去60table.setTotalWidth(PageSize.A4.getWidth()-60);//仅保留顶部边框table.getDefaultCell().disableBorderSide(14);table.getDefaultCell().setFixedHeight(40);table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);//导出人table.addCell(new Phrase("admin", textFont));//页码//初始化总页码模板if(null == totalNumTemplate){totalNumTemplate = write.getDirectContent().createTemplate(30, 16);}//再嵌套一个表格 一左一右 左边当前页码 右边总页码 PdfTable pageNumTable = new PdfTable(2);pageNumTable.setTotalWidth(new float[]{80f, 80f});pageNumTable.setLockedWidth(true);pageNumTable.setPaddingTop(-5f);//第一列居右pageNumTable.getDefaultCell().disableBorderSide(15);pageNumTable.getDefaultCell().setFixedHeight(16);pageNumTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);pageNumTable.getDefaultCell().setVerticalAlignment(Element.ALIGN_BOTTOM);pageNumTable.addCell(new Phrase(writer.getPageNumber()+" / ", textFont));//第二列居左Image totalNumImg = Image.getInstance(totalNumTemplate);totalNumImg.setPaddingTop(-5f);pageNumTable.getDefaultCell().setPaddingTop(-18f);pageNumTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);pageNumTable.getDefaultCell().setVerticalAlignment(Element.ALIGN_TOP);pageNumTable.addCell(totalNumImg);//把页码表格添加到页脚表格table.addCell(pageNumTable);//日期table.addCell(new Phrase(new Date(), textFont));//再把表格写到页脚处 使用绝对定位table.writeSelectedRows(0, -1, 30, 40, write.getDirectContent());}/*** 文档关闭事件*/@Overridepublic void onCloseDocument(PdfWriter writer, Document docment){//创建字体Font textFont = new Font(BASE_FONT, 10f);//将最后的页码写入到总页码模板String totalNum = writer.getPageNumber + "页";totalNumTemplate.beginText();totalNumTemplate.setFontAndSize(BASE_FONT, 5f);totalNumTemplate.showText(totalNum);totalNumTemplate.setHeight(16f);totalNumTemplate.endText();totalNumTemplate.closePath();}}

PdfTest

public class PdfTest{public static void main(String[] args){String pdfPath = "test.pdf";Document docment = new Documnet(PageSize.A4);PdfWriter writer = PdfWriter.getInstance(docment, new FileOutputStream(pdfPath));docment.open();PdfHeaderFooterEvent event = new PdfHeaderFooterEvent();writer.setPageEvent(event);document.add(new Paragraph("test contents"));document.close();}}

以上就是iText5添加页脚页眉的全部伪代码逻辑。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。