iText7添加页眉、页脚

  • iText7添加页眉、页脚
    • PdfHeaderFooterEvent
    • PdfTest

iText7添加页眉、页脚

因为iText5对部分pdf操作的支持没有iText7的多,所以后续将项目原本用的itext5升级到了iText7,本文就整理一下iText7添加页眉和页脚的实现。
iText7修改实现IEventHandler,重写handlerEvent方法进行处理,然后addEventHandler到PdfDocment,并指定触发事件的类型。
还是以下边的页眉页脚为例:
页眉: 左边为logo,右边报告简称;
页脚:左边为导出人名,中间为页码,右边为导出日期;
将页眉和页脚都放在在表格里边,然后页眉仅显示底部边框,页脚仅显示顶部边框,做到分割线的作用。
注意点就是总页码,总页码是动态,只有到了写完整个文档,才能知道总页码,iText7修改为使用PdfFormXObject,并且需要在关闭文档前,手动调用。

PdfHeaderFooterEvent

@Slf4j
public class PdfHeaderFooterEvent extends IEventHandler {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 PdfFormXObject totalNumTemplate = null;/*** 事件处理*/@Overridepublic void handlerEvent(Event event){final PdfDocumentEvent docEvent = (PdfDocumentEvent) event;final PdfDocument pdfDoc = docEvent.getDocument();final Document doc = new Document(pdfDoc);final PdfPage page = docEvent.getPage();final int pageNumber = pdfDoc.getPageNumber(page);final float pdfHeight = pageSize.getHeight();try{this.addPageHeader(writer, doc, pdfHeight);}catch(Exception e){log.error("添加页眉出错", e);}try{this.addPageFooter(writer, doc, pdfDoc, page);}catch(Exception e){log.error("添加页脚出错", e);}}/*** 页眉*/private void addPageHeader(PdfTemplate writer, Document docment, float pdfHeight){//创建字体Font textFont = new Font(BASE_FONT, 10f);float width = PageSize.A4.getWidth()-60;//表格 一行两列Table table = new Table(2);table.setWidth(width);//logoImage logo = new Image(ImageDataFactory.create(logoPath));table.addCell(new Cell().add(logo).setHeight(40).setBorderTop(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderRight(Border.NO_BORDER));//名称Paragraph nameP = new Paragraph("test").setFont(textFont).setFontSize(10f);table.addCell(new Cell().add(nameP).setHorizontalAlignment(HorizontalAlignment.RIGHT).setVerticalAlignment(VerticalAlignment.MIDDLE).setTextAlignment(TextAlignment.RIGHT).setBorderTop(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderRight(Border.NO_BORDER));//设置表格的位置 页眉处table.setFixedPosition(document.getLeftMargin()-10, pdfHeight-document.getTopMargin-40, table.getWidth());document.add(table);}/*** 页脚*/private void addPageFooter(PdfWriter writer, Document docment, PdfDocument pdf, PdfPage page){Rectangle pageSize = page.getPageSize();//创建字体Font textFont = new Font(BASE_FONT, 10f);float width = PageSize.A4.getWidth()-60;//表格 一行两列Table table = new Table(3);table.setWidth(width);//导入人Paragraph nameP = new Paragraph("admin").setFont(textFont).setFontSize(10f);table.addCell(new Cell().add(nameP).setBorderBottom(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderRight(Border.NO_BORDER));//页码 居右if(null == totalNumTemplate){totalNumTemplate = new PdfFormXObject(new Rectangle(0,0,20,20));}int pageNum = pdf.getPageNumber(page);PdfCanvas canvasP = new PdfCanvas(page);Canvas canvas = new Canvas(canvasP, pageSize);canvas.setFontSize(10f);Paragraph pageP = new Paragraph(pageNum).add(" / ").setFont(textFont).setFontSize(10f);canvas.showTextAligned(pageP, 295, 10, TextAlignment.RIGHT);canvas.close();canvasP.addXObjectAt(totalNumTemplate, 300f, 7f);canvasP.release();//日期Paragraph dateP = new Paragraph("2022/09/30").setFont(textFont).setFontSize(10f);table.addCell(new Cell().add(dateP).setBorderBottom(Border.NO_BORDER).setBorderLeft(Border.NO_BORDER).setBorderRight(Border.NO_BORDER));}/*** 文档关闭  手动调用*/public void closeDocument(PdfDocument docment){//修改总页码  居左Canvas canvas = new Canvas(totalNumTemplate, docment);canvas.setFontSize(10f);canvas.showTextAligned(Integer.toString(docment.getNumberOfPages(),0,3f,TextAlignment.LEFT));canvas.close();}
}

PdfTest

public class PdfTest{public static void main(String[] args){String pdfPath = "test.pdf";PdfWriter writer = PdfWriter.getInstance(docment, new FileOutputStream(pdfPath));PdfDocument pdfDoc = new PdfDocument(writer);Document docment = new Documnet(pdfDoc);PdfHeaderFooterEvent event = new PdfHeaderFooterEvent();pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, event);document.add(new Paragraph("test  contents"));event.closeDocument(pdfDoc);document.close();}
}

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

iText7添加页眉、页脚相关推荐

  1. C# 添加PDF页眉/页脚

    这篇文章主要介绍了C# 添加PDF页眉/页脚的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 概述 页眉页脚是一篇完整.精致的文档的重要组成部分.在页眉页脚处,可 ...

  2. XMLWorkerHelper生成pdf文件添加页眉页脚

    一.Controller代码 import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io. ...

  3. 如何给PDF文件添加页眉页脚,一分钟轻松搞定

    如何给PDF文件添加页眉页脚?很多在使用PDF文件的人都会有这样的问题,不知道如何给PDF文件添加页眉页脚,想要给PDF文件添加页眉页脚需要使用到PDF编辑器,下面就使用迅捷PDF编辑器为大家操作一下 ...

  4. itext给已有pdf添加页眉页脚

    网上百度到的基本都是生成pdf的时候,添加页眉页脚,但是假如对已有的pdf添加页眉页脚就比较麻烦,突然想到了可以曲线救国,用itext进行复制pdf的时候,在添加页眉页脚,最后可以成功的. 生成pdf ...

  5. Word 注重页面细节才专业(添加页眉页脚,调整页边距,消灭孤行) | 职场人就应该这样用 Word

      本篇博文结合这两篇食用更佳(知识点遥相呼应,有共通之处,且大多结合使用,轻松举一反三) Excel 表格打印篇(批量添加标题,同页打印,打印logo与页码) Word 高效办公,三步搞定活动策划书 ...

  6. docx4j生成Word添加页眉页脚水印 页眉页脚奇偶显示首页显示

    docx4j 单独添加页眉页脚.水印的代码一搜一大堆,但很少有人把页眉+水印.奇偶页眉页脚.首页页眉页脚全面实现,最近在做相关的内容,经过大量的查阅资料,总算完成了,分享记录一下. 先看效果: 水印在 ...

  7. VB-Word添加页眉页脚

    Word文档自定义宏添加页眉页脚标识: '给指定目录下Word文件添加文档标识 Sub WordFlag()Dim FolderPicker As ObjectDim FilePath As Stri ...

  8. office/word 2010添加页眉页脚

    office/word 2010添加页眉页脚流程 页眉编辑 格式校验 页脚编辑 生成目录 老祖宗有句话讲得好 "学而不思则罔, 思而不学则殆", 学习后就要养成记录的好习惯 最近, ...

  9. Java操作poi添加页眉页脚:字体_颜色_大小

    Excel中的页眉或页脚仅在页面布局模式和打印预览模式才可见.我们可以在页眉页脚位置添加页码.工作表名.日期.文字.图片等信息.本文将通过Java代码示例来介绍页眉页脚的添加方法. 使用工具: Fre ...

  10. 编辑PDF的软件哪个好 PDF文件怎么添加页眉页脚

    PDF文件每天都可以看到,上班也是要用到的,PDF添加页眉页脚是经常要做的,编辑PDF的软件哪个好,PDF文件怎么添加页眉页脚?这个很多人都不知道,下面分享下. 1.要在百度打开工具迅捷PDF编辑器, ...

最新文章

  1. Linux 使用本地yum源及软件包管理
  2. matlab中boxplot函数的参数设置_matlab中boxplot字体大小设置
  3. mysql ---- innodb-2-索引
  4. .NET Core 中的 Generic Host快速使用指南
  5. oracle软件静默安装程序,【oracle】静默安装 oracle 11gr2
  6. linux下usb调试工具,LINUX USB调试
  7. python输出文本内容_python 打印文件里的内容
  8. 递归算法及其时间复杂度分析
  9. win10配置mysql8.0_Win10下mysql 8.0.20 安装配置方法图文教程
  10. c语言编程题2^0+2^1+……+2e63,牛客网刷题33(2道题)
  11. 【PHP学习】—PHP连接数据库(六)
  12. mysql 游标移动_MySQL游标的简单实践
  13. 《硬件接入》海康威视接入及CPU性能优化思路
  14. echart 迁徙图
  15. ATX电源的工作原理
  16. suse linux安装rpm包,suse linux rpm 安装
  17. 电子邮件协议:SMTP、POP3、IMAP4
  18. 软件测试 实验一 软件测试案例分析
  19. MapGuide 添加临时点图层
  20. 1.27 Cubemx_STM32H7 软\硬件I2C

热门文章

  1. autorecover mac的ppt_恢復Mac上的ppt文件: 救援丟失/未保存的ppt文件
  2. NSIS 头文件介绍_FileFunc.nsh(1)
  3. JVM 重点知识点总结
  4. 5.(高级)CS效果之:边框border
  5. IT就业前景怎么样?好不好?
  6. AriaNg 无法连接 aria
  7. win10更新安装会卡在44%怎么办
  8. 医疗检查报告和影像资料,扫二维码就能查看!
  9. #Latex编写时行溢出页边距
  10. Android页面的布局