瀏覽代碼

合并pdf

humuyu 3 年之前
父節點
當前提交
610d190238

+ 1 - 1
eladmin-system/pom.xml

@@ -91,7 +91,7 @@
 		<dependency>
 			<groupId>org.apache.pdfbox</groupId>
 			<artifactId>pdfbox</artifactId>
-			<version>2.0.13</version>
+			<version>3.0.0-alpha3</version>
 		</dependency>
 
 		<!-- 获取系统信息 -->

+ 28 - 12
eladmin-system/src/main/java/me/zhengjie/application/bank/service/impl/UserAXQInfoServiceImpl.java

@@ -15,6 +15,7 @@ import me.zhengjie.dao.mybatis.mapper.SysUserMapper;
 import me.zhengjie.dao.mybatis.mapper.UserAXQInfoMapper;
 import me.zhengjie.application.bank.service.UserAXQInfoService;
 import me.zhengjie.base.util.FileUploadUtil;
+import me.zhengjie.base.util.PdfUtils;
 import me.zhengjie.base.ResponseDTO;
 import me.zhengjie.base.ResultCode;
 import me.zhengjie.dao.mybatis.OrderFileRepository;
@@ -24,6 +25,7 @@ import me.zhengjie.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -164,24 +166,36 @@ public class UserAXQInfoServiceImpl implements UserAXQInfoService {
 	 *
 	 * @param signInfoList
 	 * @param businessNo
+	 * @throws Exception
 	 */
-	private void signContract(List<UploadSignInfoVO> signInfoList, String businessNo) {
-		List<OrderFileEntity> orderFileList = orderFileRepository.getOrderFileListWithCodes(businessNo, "1,2,3,4,5,6,7,8,9".split(","));
-		CFCACertUtil.proxySwitchOn = "dev".equals(systemEnv);
+	private void signContract(List<UploadSignInfoVO> signInfoList, String businessNo) throws Exception {
+		String[] codes = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
+		List<OrderFileEntity> orderFileList = orderFileRepository.getOrderFileListWithCodes(businessNo, codes);
+		// 取出所有的二进制流
+		List<InputStream> list = new ArrayList<>();
+		String fileName = "";
+		for (OrderFileEntity orderFile : orderFileList) {
+			if(StringUtils.isNotBlank(fileName)) {
+				fileName = FileUploadUtil.getFileName(orderFile.getPdfUrl());
+			}
+			InputStream inputStream = FileUploadUtil.getInputStream(orderFile.getPdfUrl());
+			list.add(inputStream);
+		}
+		byte[] b = PdfUtils.mergePdf(list);
+		//将所有需要签名的pdf进行合并
+		InputStream input = new ByteArrayInputStream(b);
+		String axqContractNo = CFCACertUtil.uploadMultiSignContract(signInfoList, null, null, input, fileName);
+		String path = businessNo + "/signed-doc/";
+		String filePath = CFCACertUtil.download(path, axqContractNo);
 		for (OrderFileEntity orderFile : orderFileList) {
-			String path = businessNo + "/signed-doc-" + orderFile.getId() + "/";
 			OrderFileEntity updateOrderFile = new OrderFileEntity();
 			updateOrderFile.setId(orderFile.getId());
 			updateOrderFile.setUpdateTime(new Date());
 			updateOrderFile.setUpdaterId(-1l);
 			try {
-				InputStream inputStream = FileUploadUtil.getInputStream(orderFile.getPdfUrl());
-				String fileName = FileUploadUtil.getFileName(orderFile.getPdfUrl());
-				String axqContractNo = CFCACertUtil.uploadMultiSignContract(signInfoList, null, null, inputStream, fileName);
 				updateOrderFile.setAxqContractNo(axqContractNo);
 				updateOrderFile.setAxqSignedTime(new Date());
-				//
-				String filePath = CFCACertUtil.download(path, axqContractNo);
+				//设置签名的pdf
 				updateOrderFile.setSignedPdfUrl(filePath);
 			} catch (Exception e) {
 				e.printStackTrace();
@@ -196,7 +210,8 @@ public class UserAXQInfoServiceImpl implements UserAXQInfoService {
 		userQw.eq("id_card", idCard);
 		userQw.eq("user_status", "1");
 		UserAXQInfoEntity userAXQInfoEntity = userAXQInfoMapper.selectOne(userQw);
-		String authStatus = StringUtils.isEmpty(userAXQInfoEntity.getAxqIsAuth()) ? "0" : userAXQInfoEntity.getAxqIsAuth();
+		String authStatus = StringUtils.isEmpty(userAXQInfoEntity.getAxqIsAuth()) ? "0"
+				: userAXQInfoEntity.getAxqIsAuth();
 		System.out.println("身份证号:" + idCard + ";授权状态:" + authStatus);
 		if ("0".equals(authStatus)) {
 			CFCACertUtil.proxySwitchOn = "dev".equals(systemEnv);
@@ -220,6 +235,7 @@ public class UserAXQInfoServiceImpl implements UserAXQInfoService {
 
 	/**
 	 * 将InputStream转为Base64
+	 * 
 	 * @param is
 	 * @return
 	 * @throws Exception
@@ -252,11 +268,11 @@ public class UserAXQInfoServiceImpl implements UserAXQInfoService {
 		String keyName = "10020220620124519009/borrower/01a245333ef6463984fefbabc6a12dee.pdf";
 		int index = keyName.lastIndexOf("/");
 		if (index != -1) {
-			String fileName = keyName.substring(index+1);
+			String fileName = keyName.substring(index + 1);
 			System.out.println(fileName);
 		}
 		// return keyName
 		System.out.println("");
-		 
+
 	}
 }

+ 88 - 30
eladmin-system/src/main/java/me/zhengjie/base/util/PdfUtils.java

@@ -1,45 +1,103 @@
 package me.zhengjie.base.util;
 
-import java.io.*;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.List;
 
+import org.apache.pdfbox.Loader;
 import org.apache.pdfbox.io.MemoryUsageSetting;
 import org.apache.pdfbox.multipdf.PDFMergerUtility;
-import org.apache.pdfbox.pdfparser.PDFParser;
 import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDPage;
-import org.apache.pdfbox.pdmodel.PDPageContentStream;
-import org.apache.pdfbox.pdmodel.font.PDFont;
-import org.apache.pdfbox.pdmodel.font.PDType1Font;
-import org.apache.pdfbox.text.PDFTextStripper;
+
+import cn.hutool.core.io.FileUtil;
+import me.zhengjie.base.pdf.CustomPageSplitter;
 
 public class PdfUtils {
-	private static String[] getPdfs(String fileAddress) throws IOException {
-		File file = new File(fileAddress);
-		String[] pdfs;
-
-		if (file.isDirectory()) {
-			pdfs = file.list();
-			return pdfs;
-		} else {
-			throw new IOException("输入的路径有问题");
+//	private static String[] getPdfs(String fileAddress) throws IOException {
+//		File file = new File(fileAddress);
+//		String[] pdfs;
+//
+//		if (file.isDirectory()) {
+//			pdfs = file.list();
+//			return pdfs;
+//		} else {
+//			throw new IOException("输入的路径有问题");
+//		}
+//	}
+
+	public static void split() throws Exception {
+		File infile = new File("E:\\home\\image\\pdf\\javaweb2020.pdf");
+		// load pdf file
+		PDDocument document = Loader.loadPDF(infile);
+		// instantiating Splitter
+		CustomPageSplitter splitter = new CustomPageSplitter();
+		splitter.setSplitAtPage(2);
+		splitter.setSplitAtPage(1, 5, 2, 4);
+		// split the pages of a PDF document
+		List<PDDocument> Pages = splitter.split(document);
+		// Creating an iterator
+		Iterator<PDDocument> iterator = Pages.listIterator();
+		// saving splits as pdf
+		int i = 0;
+		while (iterator.hasNext()) {
+			PDDocument pd = iterator.next();
+			pd.save("E:\\home\\image\\pdf\\sample_part_" + ++i + ".pdf");
+			System.out.println("Saved /home/tk/pdfs/sample_part_" + i + ".pdf");
 		}
+		document.close();
 	}
 
-	public static void main(String[] args) throws Exception {
-		
-//		PDFMergerUtility mergePdf = new PDFMergerUtility();
-//		System.out.println("请输入要合并的PDF文件所在的文件夹路径");
-//		String fileAddress = in.nextLine();
-//
-//		System.out.println("你输入的路径是:" + fileAddress);
-//		String destinationFileName = "javaweb2020.pdf";
-//
+	public static byte[] mergePdf(List<InputStream> sourcesList) throws Exception {
+		PDFMergerUtility mergePdf = new PDFMergerUtility();
+		mergePdf.addSources(sourcesList);
+		byte[] b = null;
+		OutputStream outStream = null;
+		ByteArrayOutputStream bos = null;
+		try {
+			bos = new ByteArrayOutputStream();
+			mergePdf.setDestinationStream(bos);
+			outStream = mergePdf.getDestinationStream();
+			bos = (ByteArrayOutputStream) outStream;
+			mergePdf.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());
+			b = bos.toByteArray();
+		} finally {
+			outStream.close();
+			bos.close();
+		}
+		return b;
+	}
+
+	public static void merge() throws Exception {
+		PDFMergerUtility mergePdf = new PDFMergerUtility();
+		String destinationFileName = "D:\\list\\javaweb2020.pdf";
+
 //		String[] pdfs = getPdfs(fileAddress);
 //		for (int i = 0; i < pdfs.length; i++)
-//			mergePdf.addSource(fileAddress + File.separator + pdfs[i]);
-//		mergePdf.setDestinationFileName(destinationFileName);
-//		System.out.println("合并比较费时间,请等待个几分钟吧!");
-//		mergePdf.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());
-//		System.out.print("合并完成");
+
+		mergePdf.addSource("d:\\list\\1.pdf");
+		mergePdf.addSource("d:\\list\\2.pdf");
+		mergePdf.addSource("d:\\list\\3.pdf");
+		mergePdf.addSource("d:\\list\\4.pdf");
+
+		ByteArrayOutputStream os = new ByteArrayOutputStream();
+		mergePdf.setDestinationStream(os);
+		OutputStream oo = mergePdf.getDestinationStream();
+		os = (ByteArrayOutputStream) (oo);
+
+		mergePdf.mergeDocuments(MemoryUsageSetting.setupTempFileOnly());
+		FileUtil.writeBytes(os.toByteArray(), destinationFileName);
+		oo.close();
+		os.close();
+		System.out.println("合并比较费时间,请等待个几分钟吧!");
+
+		System.out.print("合并完成");
 	}
+
+	public static void main(String[] args) throws Exception {
+		merge();
+	}
+
 }