公共部分:
需要引用的架包
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
一、合并多个PDF到一个PDF,主要使用PdfCopy
1、业务反馈系统打印的PDF文本不见了,要修复。
2、查看代码发现,只是简单地将PDF合并,并没有作任务处理
直接看代码示例:
/合并多个PDF/
public static void pdfCopyDemo() {
List<String> fileurls = new ArrayList<>();
fileurls.add("C:\\Users\\Administrator\\Desktop\\print\\wms\\20240123OUTBOUND_A4.pdf");
//fileurls.add("C:\\Users\\Administrator\\Desktop\\print\\wms\\20240123OUTBOUND_A4.pdf");
Document document = new Document();
try(ByteArrayOutputStream fos = new ByteArrayOutputStream()){
// 创建新的pdf
//这里如果直接New PdfCopy来处理,生成的PDF会变大,所以改用PdfSmartCopy。有兴趣的同学自己研究
PdfCopy copy = new PdfSmartCopy(document,fos);
//PdfWriter writer = PdfWriter.getInstance(document, fos);
document.open();
//PdfContentByte cb = writer.getDirectContent();
int numberOfPages = 0;
PdfReader reader = null;
PdfImportedPage pageTemplate = null;
for(String url : fileurls) {
PdfReader.debugmode = true; //忽略有问题的PDF 不影响正常打印
reader = new PdfReader(url);
numberOfPages = reader.getNumberOfPages();
for (int i = 0; i < numberOfPages; i++) {
//pageTemplate = writer.getImportedPage(reader, i + 1);
pageTemplate = copy.getImportedPage(reader, i + 1);
document.setPageSize(pageTemplate.getBoundingBox());
document.newPage();
//cb.addTemplate(pageTemplate, 0, 0);// 设置x,y坐标
copy.addPage(pageTemplate);
}
reader.close();
}
document.close();
//databyte = fos.toByteArray();
FileOutputStream fot = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\print\\wms\\copy.pdf");
fot.write(fos.toByteArray());
} catch (Exception e) {
throw new WMSException(GlobalExceptionMessage.DEFAULT_CODE, "Failed to download files."+WMSExceptionUtil.getExceptionInfo(e));
}
}