pdf工具类之添加页码
实现思路:将原pdf复制一份到目标pdf,在目标pdf上进行操作,复制的原因是:原pdf需要获取其pdf读入流(PdfReader),如果还在原pdf上继续宁操作,就会出现一下一下异常
java.io.FileNotFoundException: D:\testtest1\test.pdf (请求的操作无法在使用用户映射区域打开的文件上执行。)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at priv.lgq.filesysspringboot.utils.pdf.PdfUtils.addPageNum(PdfUtils.java:146)
at priv.lgq.filesysspringboot.business.DemoTest.main(DemoTest.java:28)
源码如下:
1 /**
2 * 添加页码
3 *
4 * @author 龙谷情
5 * @date 2020/11/12 14:25
6 * @param pdfPath 原pdf路径
7 * @param outFilePath 目标pdf路径
8 * @param positionX 页数位置X
9 * @param positionY 页数位置Y
10 * @param fontSize 字体大小
11 * @return java.io.File[返回类型说明]
12 * @exception/throws [异常类型] [异常说明]
13 * @since [v1.0]
14 */
15 public static File addPageNum(String pdfPath, String outFilePath, int positionX, int positionY, int fontSize) {
16 PdfReader reader = null;
17 PdfStamper stamper = null;
18 FileOutputStream outputStream = null;
19 try {
20 // 创建一个pdf读入流
21 reader = new PdfReader(pdfPath);
22 // 根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.
23 outputStream = new FileOutputStream(outFilePath);
24 stamper = new PdfStamper(reader, outputStream);
25 // 这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题.
26 BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);
27 // baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.
28 Font font = new Font(bf, 10);
29 font.setStyle(Font.BOLD);
30 font.getBaseFont();
31 // 获取页码
32 int num = reader.getNumberOfPages();
33 for (int i = 1; i <= num; i++) {
34 PdfContentByte over = stamper.getOverContent(i);
35 over.beginText();
36 over.setFontAndSize(font.getBaseFont(), fontSize);
37 over.setColorFill(BaseColor.BLACK);
38 // 设置页码在页面中的坐标
39 over.setTextMatrix(positionX, positionY);
40 over.showText("第" + i + "页");
41 over.endText();
42 over.stroke();
43 }
44 stamper.close();
45 } catch (Exception e) {
46 e.printStackTrace();
47 } finally {
48 if (outputStream != null) {
49 try {
50 outputStream.close();
51 } catch (IOException e) {
52 e.printStackTrace();
53 }
54 }
55 if (reader != null) {
56 reader.close();
57 }
58 if (stamper != null) {
59 try {
60 stamper.close();
61 } catch (DocumentException e) {
62 e.printStackTrace();
63 } catch (IOException e) {
64 e.printStackTrace();
65 }
66 }
67 }
68 File file = new File(outFilePath);
69 return file;
70 }
pdf工具类之添加页码的更多相关文章
- Java 借助poi操作PDF工具类
一直以来说写一个关于Java操作PDF的工具类,也没有时间去写,今天抽空写一个简单的工具类,拥有PDF中 换行,字体大小,字体设置,字体颜色,首行缩进,居中,居左,居右,增加新一页等功能,如果需要 ...
- springboot在工具类中添加service的方法,显示为空的解决方案
@Component// 1.将工具类声明为spring组件,这个必须不能忘 public class TestUtils { //2.自动注入 @Autowired private ItemServ ...
- java img图片转pdf 工具类
package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileNotFoundE ...
- java excel转pdf 工具类
package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileOutputStr ...
- java word转pdf 工具类
package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileOutputStr ...
- FileUtils删除文件的工具类
前提是知道文件在哪个文件夹下面然后到文件夹下面删除文件,如果文件夹也需要传参数需要对下面方法进行改造. ( 需要借助于commons-io.jar和ResourceUtils.java ) 1.De ...
- Android常见工具类封装
MD5加密 import android.annotation.SuppressLint; import java.security.MessageDigest; public class MD5 { ...
- 自写Date工具类
以前写项目的时候总是在使用到了时间的转换的时候才在工具类中添加一个方法,这样很容易导致代码冗余以及转换的方法注释不清晰导致每次使用都要重新看一遍工具类.因此整理出经常使用的一些转换,用作记录,以便以后 ...
- SpringBoot 项目在静态工具类中注入 RedisTemplate
静态属性不能直接注入,可以通过其set方法进行注入.(注意生成的set方法需要去掉static). 在工具类里直接注入RedisTemplate,两种方法: (1)使用@Autowired priva ...
- 第一章 Java工具类目录
在这一系列博客中,主要是记录在实际开发中会常用的一些Java工具类,方便后续开发中使用. 以下的目录会随着后边具体工具类的添加而改变. 浮点数精确计算 第二章 Java浮点数精确计算 crc32将任意 ...
随机推荐
- SearXNG私有化部署与Dify集成
一.概述 SearXNG 是一个免费的互联网元搜索引擎,它聚合了来自各种搜索服务和数据库的结果,但摆脱了隐私追踪 -- 用户行为既不会被引擎跟踪也不会被分析. 功能特性 自托管,可以私有化部署 没有用 ...
- Selenium反屏蔽处理
Selenium自动化过程,在浏览器内会显示如下字样 当出现此内容时,有些网站就会判定是机器在进行操作,然后网站会加载防机器操作程序,如下图滑块验证 触发反机器操作的原理大概如下 解决方法 具体代码, ...
- Java高效合并Excel报表实战:GcExcel让数据处理更简单
前言:为什么需要自动化合并Excel? 在日常办公场景中,Excel报表合并是数据分析的基础操作.根据2023年企业办公效率报告显示: 财务人员平均每周花费6.2小时在Excel合并操作上 人工合并的 ...
- 如何使用CSS和JS使网页页面灰掉
让页面灰掉,通常是通过CSS样式或JavaScript来实现.以下是一些具体的方法: 一.使用CSS样式 应用filter属性 CSS的filter属性可以用来对元素应用图形效果,如灰度.要将整个页面 ...
- Java编程--观察者(Observer)设计模式
观察者设计模式 观察者设计模式是一种行为设计模式,允许对象在其状态改变时通知其他依赖对象.它创建了一种发布者(Subject)和订阅者(Observer)之间的依赖关系.这种模式经常用于实现事件处理系 ...
- Java---实现文件拷贝
直接上代码: package com.zjw.file; import java.io.BufferedInputStream; import java.io.BufferedOutputStream ...
- SSM整合3
目录 数据库 父工程 父工程目录结构 父工程pom.xml dao层 dao层目录结构 pom.xml domain dao 配置文件 mapper配置文件 applicationContext-da ...
- XXL-JOB v3.0.0 | 分布式任务调度平台
Release Notes 1.[升级]调度中心升级至 SpringBoot3 + JDK17: 2.[升级]Docker镜像升级,镜像构建基于JDK17: 3.[优化]IP获取逻辑优化,优先遍历网卡 ...
- RPC实战与核心原理之动态分组
动态分组:超高效实现秒级扩缩容 回顾 在 RPC 里面怎么支持流量回放,应用在引入 RPC 后,所有的请求都会被 RPC 接管,而我们在 RPC 里面引入回放的原因也很简单,就是想通过线上流量来验证改 ...
- 8086汇编(16位汇编)学习笔记01.汇编基础和debug使用
原文链接: https://bpsend.net/thread-100-1-2.html 为什么学习16位汇编? 16位操作指令最多能够操作两个字节,且更能够体现出与硬件的交互.16位下的指令和32位 ...