工具类
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[] mergePDF(List<String> fileUrls) throws IOException {
PdfReader reader = null;
PdfCopy copy = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
// 初始化文档
Document document = new Document();
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();
}
} catch(DocumentException | IOException e) {
e.printStackTrace();
} finally {
Optional.ofNullable(reader).ifPresent(PdfReader::close);
Optional.ofNullable(copy).ifPresent(PdfCopy::close);
bos.close();
}
return bos.toByteArray();
}
}
异常
若待合并的PDF文件不存在则会抛出异常com.itextpdf.text.exceptions.InvalidPdfException: PDF header signature not found
评论