java

您所在的位置:网站首页 pdf合并成 java

java

2023-09-16 00:53| 来源: 网络整理| 查看: 265

在之前项目有个功能中需要做多个PDF合并,而且可能pdf数量会很多,所以在实现了三种方式后做了一下简单的时间对比

第一种方法

用的spire.doc.free依赖

e-iceblue spire.doc.free 2.0.0

代码:

File file = new File("m1.pdf"); //合并PDF文档法一 PdfDocumentBase doc = PdfDocumenrgeFiles(inputStreams.toArray(new InputStream[inputStreams.size()])); //保存文档 doc.save(file.getName(), FileFormat.PDF); doc.close(); // file转Bytes,后续要用到bytes bytes = DownLoadUtils.File2byte(file);

mergeFiles的参数可以是流数组InputStream[],也可以是文件名数组String[]等

第二种方法

使用pdfbox依赖

org.apache.pdfbox pdfbox 2.0.12

代码:

// 合并PDF文档法二 File file1 = new File("m2.pdf"); PDFMergerUtility merger = new PDFMergerUtility(); inputStreams.forEach(merger::addSource); merger.setDestinationFileName(file1.getName()); try { // 合并PDF merger.mergeDocuments(null); } catch (IOException e) { logger.error("Pdf Merge error: ", e); } // file转Bytes,后续要用到 bytes = DownLoadUtils.File2byte(file1);

除了merger.setDestinationFileName方法,也可以用它的其他类型的方式

第三种方法

用的itext依赖

com.lowagie itext 2.0.8

代码:

/** * pdf合并 * @param inputStreams 要合并的pdf的InputStream数组 * @return 合并后的pdf的二进制内容 */ private static byte[] mergePdfFiles(List inputStreams) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); Document document = new Document();// 创建一个新的PDF byte[] pdfs = new byte[0]; try { PdfCopy copy = new PdfCopy(document, bos); document.open(); for (InputStream is : inputStreams) {// 取出单个PDF的数据 PdfReader reader = new PdfReader(DownLoadUtils.InputStream2byte(is)); int pageTotal= reader.getNumberOfPages(); // logger.info("pdf的页码数是 ==> {}",pageTotal); for (int pageNo=1;pageNo


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3