pdf工具类之合并pdf文件
实现思路:根据文件集合中第一个pdf文件新建一个pdf文件对象和文件流,将此pdf文件打开,然后循环文件及和将所有的文件按章集合顺序添加到创建的这个文件中
这样生成的pdf文件的每一个部分,会和原pdf保持一直,即可以实现不同高宽的pdf进行合并,不会对pdf进行剪裁
代码如下:
1 /**
2 * 合并原pdf为新文件
3 *
4 * @author 龙谷情
5 * @date 2020/11/12 13:57
6 * @param filePathList 文件集合
7 * @param newFilePath 最终文件路径
8 * @return java.io.File[返回类型说明]
9 * @exception/throws [异常类型] [异常说明]
10 * @since [v1.0]
11 */
12 public static File mergePdfFiles(List<String> filePathList, String newFilePath) {
13 Document document = null;
14 PdfReader pdfReader = null;
15 FileOutputStream fileOutputStream = null;
16 File file = null;
17 try {
18 pdfReader = new PdfReader(filePathList.get(0));
19 document = new Document(pdfReader.getPageSize(1));
20 fileOutputStream = new FileOutputStream(newFilePath);
21 PdfCopy copy = null;
22 copy = new PdfCopy(document, fileOutputStream);
23 document.open();
24 for (int i = 0; i < filePathList.size(); i++) {
25 PdfReader reader = new PdfReader(filePathList.get(i));
26 int n = reader.getNumberOfPages();
27 for (int j = 1; j <= n; j++) {
28 document.newPage();
29 PdfImportedPage page = copy.getImportedPage(reader, j);
30 copy.addPage(page);
31 }
32 reader.close();
33 }
34 file = new File(newFilePath);
35 } catch (IOException e) {
36 e.printStackTrace();
37 } catch (DocumentException e) {
38 e.printStackTrace();
39 } finally {
40 if (document != null) {
41 document.close();
42 }
43 if (pdfReader != null) {
44 pdfReader.close();
45 }
46 try {
47 if (fileOutputStream != null) {
48 fileOutputStream.close();
49 }
50 } catch (IOException e) {
51 e.printStackTrace();
52 }
53 }
54 return file;
55 }
pdf工具类之合并pdf文件的更多相关文章
- Java 借助poi操作PDF工具类
一直以来说写一个关于Java操作PDF的工具类,也没有时间去写,今天抽空写一个简单的工具类,拥有PDF中 换行,字体大小,字体设置,字体颜色,首行缩进,居中,居左,居右,增加新一页等功能,如果需要 ...
- ZIP解压缩文件的工具类【支持多级文件夹|全】
ZIP解压缩文件的工具类[支持多级文件夹|全] 作者:Vashon 网上有非常多的加压缩演示样例代码.可是都仅仅是支持一级文件夹的操作.假设存在多级文件夹的话就不行了. 本解压缩工具类经过多次检查及重 ...
- ImageMagick convert多张照片JPG转成pdf格式,pdfunite合并PDF文件
在认识ImageMagick之前,我***的图像浏览软件是KuickShow,截图软件是KSnapShot,这两款软件都是KDE附带的软件,用起来也是蛮方便的.在一次偶然的机会中,我遇到了Imag ...
- java img图片转pdf 工具类
package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileNotFoundE ...
- java word转pdf 工具类
package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileOutputStr ...
- java excel转pdf 工具类
package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileOutputStr ...
- PHP 图片上传工具类(支持多文件上传)
====================ImageUploadTool======================== <?php class ImageUploadTool { private ...
- 工具类。父类(Pom文件)
ego_parent(pom文件) <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- 利用commons-io.jar包中FileUtils和IOUtils工具类操作流及文件
1.String IOUtils.toString(InputStream input),传入输入流对象,返回字符串,有多重重载,可按需要传参 用例: @Test public void showIn ...
- [工具类] 读取解析json文件
读取json文件并转换为字符串 /** * 通过本地文件访问json并读取 * * @param path:json文件路径 * @return:json文件的内容 */ public static ...
随机推荐
- study PostgreSQL【2-FireDAC连接PostgreSQL】
就这么个简单问题,一下午时间.想想就憋屈. 那么牛逼哄哄FireDAC居然连接PostgreSQL出问题了.帮助中说的啥意思,咱也不明白.网上一通也是云里雾里. 上干货,具体点: TFDConnect ...
- Metasploit(MSF)渗透测试之永恒之蓝实验
实验环境 前提:对方的445端口必须开放,首先要保证是能够访问到目标机器的,那么我们先ping一下目标机器,看网络是否连通 如果无法ping的话,对方机器必须要关闭防火墙,或许有其他方法在对方开启防火 ...
- 通用型产品发布解决方案(基于分布式微服务技术栈:SpringBoot+SpringCloud+Spring CloudAlibaba+Vue+ElementUI+MyBatis-Plus+MySQL+Git+Maven+Linux+Docker+Nginx - 《01》
通用型产品发布解决方案(基于分布式微服务技术栈:SpringBoot+SpringCloud+Spring CloudAlibaba+Vue+ElementUI+MyBatis-Plus+MySQL+ ...
- Joomla未授权访问漏洞|CVE-2023-23752复现及修复
00 前言 这漏洞公开有阵子了好像,今天才复现了下 Jooml 在海外使用较多,是一套使用 PHP 和 MySQL 开发的开源.跨平台的内容管理系统(CMS).Joomla 4.0.0 至 4.2 ...
- Python3正则表达式(一)
Python3正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. r ...
- Vue相关笔记
Promise基本使用 Promise是异步编程的一种解决方案,用于一个异步操作的最终完成(或失败)及其结果值的表示,比传统的回调函数方案更加合理. var promise = new Promise ...
- 工具 | burpgpt
0x00 简介 burpgpt是一款利用AI来检测安全漏洞的burpsuite插件.Burp Suite GPT扩展集成了OpenAI的GPT,以执行额外的被动扫描以发现高度定制的漏洞,并支持运行任何 ...
- 某些STL用法
STL大法好! stable_sort 基于归并排序,时间复杂度稳定同时并不会改变相对顺序,平替sort,用法一模一样.(可以过一些甚至卡sort的毒瘤,但是由于sort是均摊复杂度 \(O(nlog ...
- ASP.NET Core Web API中操作方法中的参数来源
在ASP.NET Core Web API中,有多种方式可以传递参数给操作方法.以下是一些常见的参数传递方式: 路由参数(Route Parameters):参数值从URL的路由中提取. // Rou ...
- Django中的内置Tags
Dates {% now "m/d/Y" %} copyright {% now 'Y' as current_year %} 该tag也可以接受Django的date 变量,比如 ...