依赖
org.apache.pdfbox
pdfbox
2.0.8
package com.wzcdjt.pms.module.safety.util;
import com.wzcdjt.pms.module.infra.api.file.FileApi;
import com.wzcdjt.pms.module.infra.api.file.vo.FileDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.*;
import java.util.ArrayList;
@Component
@Slf4j
public class PdfFileUtil {
@Resource
private FileApi fileApi;
public FileDTO mergePdf(ArrayList<String> file, Long tenantId) {
// 接收合并后的pdf文件流对象
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 创建PDF合并对象
PDFMergerUtility merger = new PDFMergerUtility();
try {
for (String path : file) {
byte[] byteArr = fileApi.getFileContent(path);
// 添加待合并的PDF字节流
merger.addSource(new ByteArrayInputStream(byteArr));
}
// 设定合并后的输出流对象
merger.setDestinationStream(outputStream);
// 合并PDF
merger.mergeDocuments(null);
byte[] bytes = outputStream.toByteArray();
return fileApi.createFile(bytes, tenantId);
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
/**
* 合并pdf并返回byte数组
* @param file
* @return
*/
public byte[] mergePdfGetByte(ArrayList<byte[]> file) {
// 接收合并后的pdf文件流对象
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 创建PDF合并对象
PDFMergerUtility merger = new PDFMergerUtility();
for (byte[] byteArr : file) {
// 添加待合并的PDF字节流
merger.addSource(new ByteArrayInputStream(byteArr));
}
// 设定合并后的输出流对象
merger.setDestinationStream(outputStream);
try {
// 合并PDF
merger.mergeDocuments(null);
return outputStream.toByteArray();
} catch (IOException e) {
log.error(e.getMessage());
}
return null;
}
}