背景:本人在工作共遇到了一个非常大的pdf需要生成,因为是使用单线程,生成时间需要几分钟,所以想要多线程优化,将要生成的文件看成多份,每条线程去生成一份,最后合并所有生成的pdf
导入依赖
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
java 实现
/**
* 将所有数据合并,
* @param dataList
* @return
*/
private static byte[] mergePdfData(List<byte[]> dataList) throws DocumentException, IOException {
// 新创建一个pdf
Document document = new Document();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
PdfCopy pdfCopy = new PdfCopy(document, bos);
document.open();
for (int i = 0; i < dataList.size(); i++) {
byte[] bytes = dataList.get(i);
PdfReader pdfReader = new PdfReader(bytes);
int numberOfPages = pdfReader.getNumberOfPages();
// 一页一页复制
for (int j = 1; j <= numberOfPages; j++) {
document.newPage();
PdfImportedPage importedPage = pdfCopy.getImportedPage(pdfReader, j);
pdfCopy.addPage(importedPage);
}
pdfReader.close();
}
document.close();
byte[] bytes = bos.toByteArray();
return bytes;
}