由于处理的文件中涉及到要将多张不同格式的图片也合并到pdf文件中,使用sprie.doc中的方法也可以将图片合并到pdf文件中,但是生成的pdf中会有提示的红色广告语,所以使用了com.itextpdf.text.Document中的方法进行处理:
/**
* @param outPdfFilepath 生成pdf文件路径
* @param imageFiles 需要转换的图片File类Array,按array的顺序合成图片
*/
public static void imagesToPdf(String outPdfFilepath, List<File> imageFiles) throws Exception {
log.info("进入图片合成PDF工具方法");
File file = new File(outPdfFilepath);
// 第一步:创建一个document对象。
com.itextpdf.text.Document document = new com.itextpdf.text.Document();
document.setMargins(0, 0, 0, 0);
// 第二步:
// 创建一个PdfWriter实例,
PdfWriter.getInstance(document, new FileOutputStream(file));
// 第三步:打开文档。
document.open();
// 第四步:在文档中增加图片。
int len = imageFiles.size();
for (int i = 0; i < len; i++) {
if (imageFiles.get(i).getName().toLowerCase().endsWith(".bmp")
|| imageFiles.get(i).getName().toLowerCase().endsWith(".jpg")
|| imageFiles.get(i).getName().toLowerCase().endsWith(".jpeg")
|| imageFiles.get(i).getName().toLowerCase().endsWith(".tif")
|| imageFiles.get(i).getName().toLowerCase().endsWith(".gif")
|| imageFiles.get(i).getName().toLowerCase().endsWith(".png")) {
String temp = imageFiles.get(i).getAbsolutePath();
log.info("图片路径:" + temp);
Image img = Image.getInstance(temp);
img.setAlignment(Image.ALIGN_CENTER);
// 直接设定显示尺寸
img.scaleAbsolute(780, 580);
// img.scaleAbsolute(135, 483);
// img.scaleAbsolute(364, 186);
// 根据图片大小设置页面,一定要先设置页面,再newPage(),否则无效
// document.setPageSize(new Rectangle(img.getWidth(), img.getHeight()));
// document.setPageSize(new Rectangle(597, 844));
document.setPageSize(new Rectangle(792, 596));
// document.setPageSize(new Rectangle(483, 135));
document.newPage();
document.add(img);
}
}
// 第五步:关闭文档。
document.close();
log.info("图片合成PDF完成");
}
ps:也附上使用spire.doc中将图片添加到pdf中的方法,这种方法合并的pdf文件会有水印
//pictures要合并的图片集合
public void handleImageToPdf(String fileName,String reviewPath,List<TbPicture> pictures){
//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile(reviewPath + fileName);
List<TbPicture> collect7 = pictures.stream().filter(t -> "images".equals(t.getFileType())).collect(Collectors.toList());
if (StringUtil.isNotNull(collect7)) {
log.info("开始加载图片到pdf中...");
// //添加图片到段落
for (TbPicture tbPicture : collect7) {
// //添加一页
PdfPageBase page = pdf.getPages().add();
// //加载图片,并获取图片高宽
PdfImage image = PdfImage.fromFile(tbPicture.getLocalPath());
int width = image.getWidth();
int height = image.getHeight();
//绘制图片到PDF
page.getCanvas().drawImage(image, 50, 50, width, height);
}
log.info("加载图片到pdf结束...");
}
if (file.exists()) {
boolean delete = file.delete();
if (delete) {
log.info("删除原pdf成功,并开始生成新的pdf");
pdf.saveToFile(reviewPath + fileName);
pdf.dispose();
}
}
}