文件处理之三:合并多张图片为一个pdf文件

28 篇文章 1 订阅
14 篇文章 0 订阅

由于处理的文件中涉及到要将多张不同格式的图片也合并到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();
							}
						}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值