Java实现对已有的PDF添加页码 加 总页码(二)

您所在的位置:网站首页 怎么增加pdf页数 Java实现对已有的PDF添加页码 加 总页码(二)

Java实现对已有的PDF添加页码 加 总页码(二)

2024-01-18 12:38| 来源: 网络整理| 查看: 265

Java实现对已有的PDF添加页码 加 总页码

上一篇文章已经写了《Java实现对已有的PDF添加页码》

有看过上一篇文章的读者,问如何添加总页码的问题,这次是对上一篇的文章的一个补充,加 总页码

1.思路

其实思路很简单,对PDF添加页码是采用新生成一个PDF文件,对源PDF文件一页一页的复制后触发页码监听器,我们可以在添加页码监听器时,传入源PDF文件的总页码

// 读取 源PDF文件,进行一页一页复制,才能触发 添加页码的 页面监听事件 PdfReader reader = new PdfReader(orgPdfPath); // 获取 源文件总页数 int num = reader.getNumberOfPages(); System.out.println("总页数:" + num); // 新建文档,默认A4大小 Document document = new Document(PageSize.A4); PdfWriter writer = PdfWriter.getInstance(document, fos); // 设置页面监听事件,必须在open方法前 // 设置有总页数的 页面监听事件 writer.setPageEvent(new PageNumAndTotalPdfPageEvent(num)); document.open();

2.带总页码的页码监听 package com.tianya.pdf; import com.itextpdf.text.Document; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.ColumnText; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfPageEventHelper; import com.itextpdf.text.pdf.PdfWriter; /** * @description * 针对页码生成的PDF事件监听 *

* 添加页码的同时,也添加总页数 * @author TianwYam * @date 2021年06月06日上午11:51:08 */ public class PageNumAndTotalPdfPageEvent extends PdfPageEventHelper{ // 总页数 private int totalPageNums ; public PageNumAndTotalPdfPageEvent() { super(); } /** * 传入总页码 * @param pageNums 总页码 */ public PageNumAndTotalPdfPageEvent(int pageNums) { super(); this.totalPageNums = pageNums ; } @Override public void onEndPage(PdfWriter writer, Document document) { try { // PDF文档内容 PdfContentByte pdfContent = writer.getDirectContent(); pdfContent.saveState(); pdfContent.beginText(); int footerFontSize = 14 ; // 解决页码中文无法显示 或者 显示为乱码的问题 // 但是必须引入jar包 itext-asian-5.2.0.jar BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false); Font fontDetail = new Font(baseFont, footerFontSize, Font.NORMAL); pdfContent.setFontAndSize(baseFont, footerFontSize); // 页脚的页码 展示 总页码 String footerNum = String.format("第%d页 共%d页", writer.getPageNumber(), totalPageNums); Phrase phrase = new Phrase(footerNum, fontDetail); // 页码的 横轴 坐标 居中 float x = ( document.left() + document.right() ) / 2 ; // 页码的 纵轴 坐标 float y = document.bottom(-10) ; // 添加文本内容,进行展示页码 ColumnText.showTextAligned(pdfContent, Element.ALIGN_CENTER, phrase, x, y, 0); pdfContent.endText(); pdfContent.restoreState(); } catch (Exception e) { e.printStackTrace(); } // super.onEndPage(writer, document); } }

3.工具类实现 /** * @description * 给PDF文件添加页码及总页数 * @author TianwYam * @date 2021年06月06日上午11:51:08 * @param orgPdfPath 源PDF文件路径 * @param outputPdfPath 加了页码的PDF文件路径 * @return 返回添加了页码的PDF文件路径 */ public static String addPageNumAndTotal(String orgPdfPath, String outputPdfPath) { try ( // 输出文件 流 FileOutputStream fos = new FileOutputStream(outputPdfPath) ;){ // 读取 源PDF文件,进行一页一页复制, // 才能触发 添加页码的 页面监听事件 PdfReader reader = new PdfReader(orgPdfPath); // 获取 源文件总页数 int num = reader.getNumberOfPages(); System.out.println("总页数:" + num); // 新建文档,默认A4大小 Document document = new Document(PageSize.A4); PdfWriter writer = PdfWriter.getInstance(document, fos); // 设置页面监听事件,必须在open方法前 // 设置有总页数的 页面监听事件 writer.setPageEvent(new PageNumAndTotalPdfPageEvent(num)); document.open(); // PDF内容体 PdfContentByte pdfContent = writer.getDirectContent(); // 页面数是从1开始的 for (int i = 1; i e.printStackTrace(); } return outputPdfPath ; }

4.效果

在这里插入图片描述

欢迎关注,谢谢!

刚开始写微信公众号,请多多关注,欢迎,多谢!

微信公众号:《Java学习积累》 请关注一下,多谢!!! 微信公众号:Java学习积累



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3