使用itextpdf操作合并拼接了pdf,实现了三种方法,三种方法都使用原文档作为模板,保证输出文档的可靠性。
Mave POM
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
方法一:
PDFJoin.mergepdf(fileList,"d:/pdfjoin/all.pdf");
IText自带的merge,合并pdf
方法二:
public static void mergepdf(List<String> fileList, String savepath) {
Document document = null;
try {
document = new Document(new PdfReader(fileList.get(0)).getPageSize(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(savepath));
document.open();
for (int i = 0; i < fileList.size(); i++) {
PdfReader reader = new PdfReader(fileList.get(i));
copy.addDocument(reader);
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} finally {
if (document != null) {
document.close();
}
}
}
读取所有文档然后追加到新的文档
方法三:
public static void mergepdf(List<String> fileList, String savepath) {
Document document = null;
try {
document = new Document(new PdfReader(fileList.get(0)).getPageSize(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(savepath));
document.open();
for (int i = 0; i < fileList.size(); i++) {
PdfReader reader = new PdfReader(fileList.get(i));
int n = reader.getNumberOfPages();
for (int j = 1; j <= n; j++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, j);
copy.addPage(page);
}
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} finally {
if (document != null) {
document.close();
}
}
}
读取PDF文档的页,然后一页一页追加到新的文档。
总结:方法一很简单,官方的可靠,而且性能相差不多,但根据我的测试,后面方法三的速度会稍微快一点点,这个我页奇怪,也许只是偶然或者测试不够充分。