当前位置: 首页> 健康> 科研 > Java项目中整合多个pdf合并为一个pdf

Java项目中整合多个pdf合并为一个pdf

时间:2025/9/8 0:19:27来源:https://blog.csdn.net/weixin_45207323/article/details/140589522 浏览次数:0次

一、Java项目中整合多个pdf合并为一个pdf

gitee笔记路径:https://gitee.com/happy_sad/drools

一、依赖导入

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.6</version>
</dependency>
<dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>7.6.0.Final</version>
</dependency>
<dependency><groupId>org.kie</groupId><artifactId>kie-internal</artifactId><version>7.6.0.Final</version>
</dependency>

二、设置端口

server.port=8082

三、设置已存在的多个pdf

注意:此次为模拟获取多个pdf,所以本人做两个pdf的合并实验,所以将两个pdf放入项目中的/resources/mergepdfs文件夹中,合并时遍历该文件夹下的所有文件,转换字节流

image-20240721160034444

四、controller

package com.jin.test.controller;import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;/*** @Package:com.jin.test.controller* @ClassName: MergepdfTestController* @Description: 项目中整合多个pdf合并为一个pdf* @Date: 2024/07/21 14:22* @Author: Jin*/
@Log4j2
@RestController
@RequestMapping("/mergepdf")
public class MergepdfTestController {@Autowiredprivate ResourceLoader resourceLoader;@RequestMapping("/download")public void downloadFile(HttpServletResponse response) throws Exception {List<byte[]> finalList = Collections.synchronizedList(new ArrayList<>());ArrayList<String> fileNames = new ArrayList<>();Resource folderResource = resourceLoader.getResource("classpath:" + "mergepdfs");if (folderResource.exists()) {try (Stream<Path> files = Files.list(Paths.get(folderResource.getURI()))) {files.forEach(filePath ->fileNames.add(filePath.toString()));}for (String fileNmae : fileNames) {File file = new File(fileNmae);FileInputStream fis = new FileInputStream(file);ByteArrayOutputStream bos = new ByteArrayOutputStream();int byteContent;while ((byteContent = fis.read()) != -1) {bos.write(byteContent);}byte[] bytes = bos.toByteArray();finalList.add(bytes);}byte[] finalByte = this.mergepdf(finalList);ServletOutputStream outputStream = response.getOutputStream();outputStream.write(finalByte);outputStream.flush();} else {System.out.println("Folder not found: " + "mergepdfs");}}/*** pdf合并方法* @param bytes* @return* @throws Exception*/public byte[] mergepdf(List<byte[]> bytes) throws Exception {ByteArrayOutputStream bos = new ByteArrayOutputStream();Document document = new Document();PdfCopy copy = new PdfCopy(document, bos);document.open();for (byte[] bs : bytes) {PdfReader reader = new PdfReader(bs);int pageTotal = reader.getNumberOfPages();log.info("pdf的页码数是 ==>{}", pageTotal);for (int pageNo = 1; pageNo <= pageTotal; pageNo++) {document.newPage();PdfImportedPage page = copy.getImportedPage(reader, pageNo);copy.addPage(page);}reader.close();}document.close();byte[] pdfs = bos.toByteArray();bos.close();copy.close();return pdfs;}
}

五、测试结果

1、Apifox请求

http://localhost:8082/mergepdf/download

image-20240721155308587

2、例子1.pdf页数为26

image-20240721155044665

3、例子2.pdf页数为2

image-20240721155123050

4、合并后的pdf页数为28

image-20240721155155625

关键字:Java项目中整合多个pdf合并为一个pdf

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: