在开发某些业务系统的时候,可能会遇到需要合并PDF文件这样的需求,即将多个PDF文件合并成一个新的PDF文件,这个时候可以借助于 itextpdf 这个开源库进行实现,这个库在操作PDF方面还是很强大的。

下面通过具体的代码来演示。

1、引入依赖

目前 itextpdf 最新版本为 5.5.13.3,可以在 https://search.maven.org/ 网站进行搜索。

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version>
</dependency>

2、代码实现

package com.magic.itextpdf;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;public class PdfUtils {/*** 合并PDF文件* @param sourceFilePaths 需要合并的PDF文件路径列表* @param destFilePath 合并后的新文件*/public static void mergePdfFile(List<String> sourceFilePaths, String destFilePath) {if (sourceFilePaths == null || sourceFilePaths.isEmpty() || destFilePath == null) {return;}Document document = null;PdfCopy copy = null;OutputStream os = null;try {// 创建合并后的新文件的目录Path dirPath = Paths.get(destFilePath.substring(0, destFilePath.lastIndexOf(File.separator)));Files.createDirectories(dirPath);os = new BufferedOutputStream(new FileOutputStream(new File(destFilePath)));document = new Document(new PdfReader(sourceFilePaths.get(0)).getPageSize(1));copy = new PdfCopy(document, os);document.open();for (String sourceFilePath : sourceFilePaths) {// 如果PDF文件不存在,则跳过if (!new File(sourceFilePath).exists()) {continue;}// 读取需要合并的PDF文件PdfReader reader = new PdfReader(sourceFilePath);// 获取PDF文件总页数int n = reader.getNumberOfPages();for (int j = 1; j <= n; j++) {document.newPage();PdfImportedPage page = copy.getImportedPage(reader, j);copy.addPage(page);}}} catch (Exception e) {e.printStackTrace();} finally {if (copy != null) {try {copy.close();} catch (Exception ex) {/* ignore */}}if (document != null) {try {document.close();} catch (Exception ex) {/* ignore */}}if (os != null) {try {os.close();} catch (Exception ex) {/* ignore */}}}}
}

合并PDF文件的本质其实就是新创建一个PDF文件,然后依次拷贝需要合并的PDF的每个页面,主要的关键类是 PdfCopy ,用于复制 PDF 页面,PdfCopy 类图如下:

PdfCopy 类是一个比较常用的类,比如在旋转PDF、抽取PDF时都可能会用到,此处先不对 PdfCopy 类的源码做过多介绍,关于该类的更多应用可以阅读我的另外两篇文章:

  • 使用itextpdf实现横板PDF文件与竖版PDF文件的相互转换
  • 使用itextpdf提取PDF文件中的任意页码

3、测试验证

    public static void main(String[] args) {List<String> sourceFilePaths = Arrays.asList("D:\\Test\\test_1.pdf", "D:\\Test\\test_2.pdf", "D:\\Test\\test_3.pdf");PdfUtils.mergePdfFile(sourceFilePaths, "D:\\Test\\test_merged.pdf");}

运行后,可以看到在 D:\Test 目录下生成了 test_merged.pdf 文件,其中test_1.pdftest_2.pdftest_3.pdf都是两页,合并后的文件 test_merged.pdf 为6页,如下:

使用itextpdf将多个PDF文件合并为一个PDF文件相关推荐

  1. PDF合并:如何将两个PDF文件合并成一个PDF文件

    PDF文件是我们在工作中经常能够用到的文件,尤其是在办公中会遇到很多PDF文件在传输的过程中为了传输更快被拆分成了几个PDF文件,但是要找一个完整的PDF文件就需要把两个被拆分的PDF文件合并成一个P ...

  2. 如何将多个PDF文件合并为一个PDF文件?PDF文件合并教程

    如何合并PDF文件?PDF我们都不陌生,很多人经常在网站上搜狐各种类型的PDF资料,但是有时因为资料太多不好管理和查阅,如果可以把同类型的多个PDF文件合并为一个PDF文件,那无论是保存还是查阅,都会 ...

  3. 怎么将几张pdf合并成一张_如何将多个pdf文件合并成一个pdf文件?

    原标题:如何将多个pdf文件合并成一个pdf文件? 我很喜欢使用PDF文件格式,为什么呢?因为PDF具有许多其他电子文档格式无法相比的优点.PDF文件格式可以将文字.字型.格式.颜色及独立于设备和分辨 ...

  4. 多个PDF怎么合并成一个PDF文件?好用的方法学习一下

    最近有小伙伴咨询说平时工作中接收到和之前已存留的PDF文件太多了,很多都是统一个类型的文件都分成了很多个单独的文件,整理起来比较麻烦,也不知道该如何去整合.那么多个PDF怎么合并成一个PDF文件呢?今 ...

  5. PDF如何合并为一个PDF?

    如何将多个PDF文档合并为一个PDF文档? 我们经常需要将同类型的多个PDF文件合并为一个PDF文件,那如何合并呢?只需借助专门的PDF工具,我们就可以轻松将多个PDF文件合并为一个PDF文件. 可以 ...

  6. 多个pdf怎么合并成一个pdf?教您几招快速合并的方法!

    多个pdf怎么合并成一个pdf?通常来说,将多个PDF文件进行合并是非常重要的.在我们日常工作中,我们经常需要使用PDF文件,比如合同.报告等.将多个相关的PDF文件合并成一个更大的文件可以方便我们查 ...

  7. 多个pdf怎么合并成一个pdf

    如何合并多个PDF文件? 除word,PPT,Excel等文件格式外,PDF文件也越来越成为我们日常工作中的主流常用文件格式.我们处理工作文档是可能经常遇到许多分分散的PDF文件,那么我们如何更有效的 ...

  8. 用python将指定目录下的所有json文件合并成一个csv文件

    #!/usr/bin/env python # -*- encoding: utf-8 -*-import sys import json import os import pandas as pd ...

  9. 把一个文件夹下的所有csv文件合并到一个csv文件中,并添加文件名作为列名

    DEAM数据集的标签如图所示,共有1802个csv文件,每首音乐的特征单独存储在一个csv文件中: 现在想要将这些csv文件合并到一个csv文件中,同时用文件名作为列名.用python代码实现如下: ...

  10. 将两个HEX文件合并成一个HEX文件

    将两个HEX文件合并成一个HEX文件 文章目录 将两个HEX文件合并成一个HEX文件 系统环境 1. 生成BootLoader和app的HEX文件 2. 将两个HEX文件合并成一个HEX 3. 利用J ...

最新文章

  1. 李沐团队提出最强ResNet改进版,多项任务达到SOTA | 已开源
  2. 加快modelsim仿真速度的方法(原创)
  3. 理解 async/await 的执行
  4. Java线程详解(9)-并发协作
  5. 网络:TCP停止等待、超时重传、滑动窗口、拥塞控制、快重传和快恢复
  6. C++动态绑定及返回类型协变
  7. 信息学奥赛一本通 1101:不定方程求解 | OpenJudge NOI 2.1 7650 | 小学奥数 7650
  8. 产品经理的自我修养—认知模式
  9. 就在昨天,张一鸣宣布卸任字节跳动CEO!
  10. 【问题解决】seckill-秒杀项目 -- 服务端异常
  11. 《电子元器件的可靠性》——3.1节可靠性试验的意义
  12. 【语义分割系列:八】Segmentation 数据集 介绍下载论文
  13. 《Constrained Convolutional Neural Networks for Weakly Supervised Segmentation》翻译
  14. 二进制十进制小数转换
  15. 《CAT NAUGHTY CARP》App Store 隱私政策網址(URL)
  16. Java技术笔记1:类与对象实例之系统常用类
  17. 数值分析·学习 | 拉格朗日插值法matlab实现
  18. python 3d打印机_如何使用Python构建自己的CNC控制器和3D打印机
  19. 有苦有乐的算法 --- 并查集的实现原理
  20. 2022世界VR产业大会圆满收官,酷雷曼惊艳亮相!

热门文章

  1. 设为首页、加入收藏及保存到桌面的JS代码
  2. 基于LabVIEW的轴承信号采集分析仪的设计
  3. android矢量地图画法_Android 我们的矢量地图,放大不失真
  4. 《德语助手》 权威的德汉词典2013版 彻底汇编 除时间限制 破解日志:
  5. Alexa排名 介绍
  6. win7怎么把计算机图标下的箭头掉,Win7桌面图标有小箭头怎么去掉?Win7去除桌面图标小箭头的方法...
  7. webservice 框架比较
  8. ISO国家和地区代码
  9. Photoshop插件-删除亮调通道蒙板-脚本开发-PS插件
  10. 判断门禁卡是否加密_教你用手机模拟加密门禁卡-不用电脑