使用itextpdf对PDF文件添加页码

2023-12-31 19:08
文章标签 使用 pdf 页码 itextpdf

本文主要是介绍使用itextpdf对PDF文件添加页码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原本想着谷歌后用下CV大法,无奈找不到合适的,刚好手头有一些代码,就拿来改了改,这样反而更快。说是对PDF添加页码,其实就是将页码印到PDF上,下面的这种方法比较灵活也比较简单,可以对添加页码的内容以及位置进行调整。话不多说,直接上代码。

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;public class PDFUtil{// 必须要有private static final String PATH_FONT_COUR = "C:\\Windows\\Fonts\\STFANGSO.TTF";public static void addPageNum(String pdfPath, String outFilePath) {PdfReader reader = null;PdfStamper stamper = null;try {// 创建一个pdf读入流reader = new PdfReader(pdfPath);// 根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.stamper = new PdfStamper(reader, new FileOutputStream(outFilePath));// 这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题.BaseFont bf = BaseFont.createFont(PATH_FONT_COUR, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.Font font = new Font(bf, 10);font.setStyle(Font.BOLD);font.getBaseFont();// 获得宽Rectangle pageSize = reader.getPageSize(1);float width = pageSize.getWidth();// 获取页码int num = reader.getNumberOfPages();for (int i = 1; i <= num; i++) {PdfContentByte over = stamper.getOverContent(i);over.beginText();over.setFontAndSize(font.getBaseFont(), 13);over.setColorFill(BaseColor.BLACK);// 设置页码在页面中的坐标over.setTextMatrix((int) width - 55, 15); 
//				over.setTextRenderingMode(1); // 设置字体加粗over.showText("第" + i + "页");over.endText();over.stroke();}stamper.close();} catch (Exception e) {e.printStackTrace();} finally {if (reader != null) {reader.close();}}}
}

可以把获取高和宽的代码放到for循环里面,这样获取的高宽为每页的高和宽(有的PDF文件每页的高宽不一致),这样添加水印就不会出现水印添加不上的情况。

这篇关于使用itextpdf对PDF文件添加页码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/556908

相关文章

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

Java使用Spire.Barcode for Java实现条形码生成与识别

《Java使用Spire.BarcodeforJava实现条形码生成与识别》在现代商业和技术领域,条形码无处不在,本教程将引导您深入了解如何在您的Java项目中利用Spire.Barcodefor... 目录1. Spire.Barcode for Java 简介与环境配置2. 使用 Spire.Barco

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

C# 预处理指令(# 指令)的具体使用

《C#预处理指令(#指令)的具体使用》本文主要介绍了C#预处理指令(#指令)的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1、预处理指令的本质2、条件编译指令2.1 #define 和 #undef2.2 #if, #el

C#中Trace.Assert的使用小结

《C#中Trace.Assert的使用小结》Trace.Assert是.NET中的运行时断言检查工具,用于验证代码中的关键条件,下面就来详细的介绍一下Trace.Assert的使用,具有一定的参考价值... 目录1、 什么是 Trace.Assert?1.1 最简单的比喻1.2 基本语法2、⚡ 工作原理3

C# IPAddress 和 IPEndPoint 类的使用小结

《C#IPAddress和IPEndPoint类的使用小结》本文主要介绍了C#IPAddress和IPEndPoint类的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录一、核心作用网络编程基础类二、IPAddress 类详解三种初始化方式1. byte 数组初始化2. l

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达