最近需要做一个把多个pdf报告合并成一个以方便预览的需求,下面总结一下自己用的方法和遇到的一些问题,

第一种方法:

此方法引用了itextpdf.jar包:

private static void mergePDF(){try {FileInputStream inputStream = new FileInputStream(new File(path+files[0]));//其中new PdfReader() 的参数可以是文件路径,或者是FileInputStream 输入流,或者是byte[] 我这里采用的是输入流document = new Document(new PdfReader(inputStream).getPageSize(1));newf = new FileOutputStream(newfile);PdfCopy copy = new PdfCopy(document, newf);document.open();for (int i = 0; i < files.length; i++) {FileInputStream input = new FileInputStream(new File(path+files[i]));PdfReader reader = new PdfReader(input);int n = reader.getNumberOfPages();for (int j = 1; j <= n; j++) {document.newPage();PdfImportedPage page = copy.getImportedPage(reader, j);copy.addPage(page);}}newf.flush();newf.close();copy.flush();copy.close();} catch (Exception e) {e.printStackTrace();}finally {document.close();}}

第二种方法:

这种方法需要下载jar包:Spird.Pdf.jar 这个包是免费的,

package test;import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfDocumentBase;public class Test {public static void main(String[] args) {String []  ss = new String[2];ss[0] = "/ceshi/01.pdf";ss[1] = "/ceshi/02.pdf";String mergepath = "/ceshi/00.pdf";//合并PDF文件 ss为文件路径数组PdfDocumentBase doc = PdfDocument.mergeFiles(ss);//保存结果文件 mergepath:为合并的文件路径//FileFormat.PDF :此参数是要合成目标文件的格式doc.save(mergepath, FileFormat.PDF);}}

第三种方法:

这种方法和第二种一样只是传入的参数不同,参数是文件输入流的数组

 private static void mergePDF() throws FileNotFoundException {FileInputStream file1 = new FileInputStream(new File("path1"));FileInputStream file2 = new FileInputStream(new File("path2"));FileInputStream file3 = new FileInputStream(new File("path3"));FileInputStream file4 = new FileInputStream(new File("path4"));InputStream[] streams = new FileInputStream[]{file1,file2,file3,file4};//通过Stream合并文件PdfDocumentBase doc = PdfDocument.mergeFiles(streams);//保存结果文件doc.save("merge.pdf", FileFormat.PDF);doc.close();}

遇到的问题:

用第一种方法时,我在本地开发测试都没问题,然后上到测试环境就会报错:com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found.  到最后也没有查到是什么错,传入三种参数的方法都试了一遍还是不行,有同学遇到相同问题的可以交流一下,

最后我用的第二种方法,这个也遇到了一个小问题,因为是导入的外部jar包,我只在build path了一下,这就导致测试demo是没问题的 ,但是在maven项目中报NoClassDefFoundError(附上解决连接)的错,解决办法就是在pom.xml文件中引入:

<dependency>
            <groupId>com.spire</groupId>
            <artifactId>Spird.Pdf</artifactId>
            <version>2.7.8</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/Spire.Pdf.jar</systemPath>
        </dependency>

<systemPath>:这个配你引入的Spird.Pdf.jar包在项目中的位置。

之后就没问题了。

Java合并PDF文件的几种方法相关推荐

  1. android选择多个文件_一分钟合并多个Excel、PDF文件,3种方法任你选择,好用到没朋友...

    一分钟合并多个Excel.PDF文件,3种方法任你选择,好用到没朋友 前情提要: Excel.PDF多个文件怎样合并成一个文件?需求场景: PDF文件合并 当一份完成的PDF资料分为很多份的时候,我们 ...

  2. Java合并pdf文件

    Java合并pdf文件 今天帮老师整理资料需要合并pdf文件,下了许多软件发现都需要VIP才行,所以写了个程序来帮助合并,直接在主程序中修改文件路径即可,如下图: 主要代码如下: package co ...

  3. 合并BIN文件的两种方法

    合并BIN文件的两种方法 在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一个文件,方便烧写和生产.下面结合STM32的IAP Bootloader Code和Application Cod ...

  4. java 合并pdf报错,[Java教程]java合并PDF文件

    [Java教程]java合并PDF文件 0 2017-02-22 12:00:52 使用java代码合并PDF文件需要导入iText-2.1.7.jar包1 import java.io.FileOu ...

  5. 合并HEX文件的一种方法

    <合并BIN文件的两种方法>介绍了如何合并BIN文件,在这个基础之上再配合hex2bin.exe和bin2hex.exe这两个小工具就可以很方便的将两个HEX文件合并成一个了.当然,最终目 ...

  6. 编辑PDF文件的两种方法

    PDF文件具备较好的稳定性.兼容性,在日常工作中的应用非常广泛,但想要编辑文件内容就不那么容易了,下面来说说编辑PDF文件的两种方法. 方法一: 我们知道,查看PDF文件只需要阅读器就可以了,如果想对 ...

  7. Java 合并PDF文件

    这篇文章主要介绍如何在Java应用程序中实现将多个PDF文件合并为一个PDF的功能. 使用组件: Spire.PDF for Java 使用以下代码前,需要下载Spire.PDF for Java包并 ...

  8. 如何合并PDF文件?两个方法教你轻松合并

    怎么把PDF文件合并到一起呢?经常使用PDF文件的小伙伴肯定有合并PDF文件的需求,因为很多时候我们的PDF文件不是一个两个,而是有很多个内容简短的单个文件,这样阅读起来就会很麻烦,需要挨个打开不说, ...

  9. 免费合并pdf文件最简单的方法有哪些?思路提供

    PDF(Portable Document Format)是一种广泛使用的电子文档格式,由于其跨平台和保留格式的特性,它越来越受到欢迎.它已成为许多公司和个人进行文件共享的首选格式.在某些情况下,您可 ...

最新文章

  1. java中volatile_Java中Volatile关键字详解
  2. C# xml文件的创建,修改和添加节点 。
  3. 向三姑六婶解释你在一线城市的工作
  4. Discuz完整手动迁移教程(不使用备份功能)
  5. 阿里云服务器和mysql的原理_mysql 数据库同步原理
  6. mysql登录跳转不了_Session过期后实现自动跳转登录页面
  7. 熬夜写代码,不如换女装入 GitHub 获上千 Star?
  8. Android4.2中Phone的P-sensor的应用的分析。
  9. python中组合数据类型、函数和代码复用的难点_Python电子教案5-2 函数和代码复用...
  10. 为 Perl 定制 Vim
  11. 矩阵论7,8,9作业
  12. java 按照拼音排序_java List中元素按照拼音排序
  13. 深度学习-吴恩达第一课第二周课程作业
  14. 消费品图像识别|无人新零售背后的商品识别技术
  15. PCL学习笔记3-KdTree
  16. Java通过mybatis插入Oracle数据库中Date格式不显示到时分秒问题
  17. 报表工具之ireport
  18. Redis主从连接失败 connected_slaves:0
  19. 呀,葵花宝典![IT项目经理成长晋升记2]
  20. c语言输出字母A的ascii值,ascii是什么意思_C语言中如何输出ASCII码

热门文章

  1. 盖师贝格-撒克斯通(GS)算法及其改进算法
  2. vivo的android是什么手机图片,vivo是什么牌子?vivo手机价格介绍
  3. 有什么免费的文字转语音软件?推荐几款新手也容易上手的软件
  4. ArcMap:选择一个可编辑的要素进行修改
  5. linux服务器关闭蜂鸣报警,在Windows 10上禁用Linux Bash的蜂鸣声
  6. 航空货运处理系统市场现状及未来发展趋势
  7. C语言--小端模式和大端模式
  8. Spark 会把数据都载入到内存吗
  9. 陕西2021年工程师职称申报主要条件
  10. ISO8601时间格式在bpmn定时器中的应用