工具类
package cn.codesensi.util;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Optional;
public class PDFUtil {
/**
* 多个PDF文件合并成一个
* @param fileUrls 需合并的PDF地址集合
* @return 合并后的PDF字节数据
*/
public static byte[] mergePdfFiles(List < String > fileUrls) {
byte[] pdfBytes = new byte[0];
// 创建一个新的PDF
Document document = new Document();
PdfReader reader = null;
PdfCopy copy = null;
try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
copy = new PdfCopy(document, bos);
document.open();
// 取出单个PDF的数据
for (String url: fileUrls) {
reader = new PdfReader(url);
int pageTotal = reader.getNumberOfPages();
for (int pageNo = 1; pageNo <= pageTotal; pageNo++) {
document.newPage();
PdfImportedPage page = copy.getImportedPage(reader, pageNo);
copy.addPage(page);
}
reader.close();
}
pdfBytes = bos.toByteArray();
} catch (DocumentException | IOException e) {
e.printStackTrace();
} finally {
document.close();
Optional.ofNullable(reader).ifPresent(PdfReader::close);
Optional.ofNullable(copy).ifPresent(PdfCopy::close);
}
return pdfBytes;
}
}
异常
若待合并的PDF文件不存在则会抛出异常com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found
评论