多张图片合并转为PDF
程序员文章站
2022-03-26 17:41:29
package cc.sunni;import com.itextpdf.text.Document;import com.itextpdf.text.Image;import com.itextpdf.text.Paragraph;import com.itextpdf.text.pdf.PdfWriter;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;....
需要使用的依赖
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>4.2.2</version>
</dependency>
package com.tgpms.web.tongfei.utils;
import cn.hutool.core.collection.CollectionUtil;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
/**
* @Author: jiangli
* @Date: 2021/1/6 16:37
* 将多张图片合并转为PDF
*/
public class ImageToPdfUtil {
/**
* 保存到本地
*
* @param imageFolderPath 图片文件夹地址
* @param pdfPath PDF文件保存地址
*/
public static void toPdf(String imageFolderPath, String pdfPath) {
//创建一个文档对象
Document doc = new Document();
try {
// 输入流
FileOutputStream fos = new FileOutputStream(pdfPath);
// 写入PDF文档
PdfWriter.getInstance(doc, fos);
//开启文档
doc.open();
// 获取图片文件夹对象
File file = new File(imageFolderPath);
File[] files = file.listFiles();
// 循环获取图片文件夹内的图片
if (files != null && files.length > 0) {
for (File f : files) {
if (f.getName().endsWith(".png")
|| f.getName().endsWith(".jpg")
|| f.getName().endsWith(".gif")
|| f.getName().endsWith(".jpeg")
|| f.getName().endsWith(".tif")) {
String imagePath = imageFolderPath + f.getName();
// 实例化图片
Image image = Image.getInstance(imagePath);
//设置图片居中显示
image.setAlignment(Image.MIDDLE);
// 添加图片到文档
doc.add(image);
// 换行,增加间距
doc.add(new Paragraph("\n"));
}
}
}
// 关闭文档
doc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 通过流下载
* @param imageList image集合
* @param response 响应
*/
public static void downloadPdf(List<BufferedImage> imageList, HttpServletResponse response) {
String fileName = "材料二维码.pdf";
//创建一个文档对象
Document doc = new Document();
try(OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());) {
// 防止中文乱码
fileName = URLEncoder.encode(fileName, "UTF-8");
response.reset();
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentType("application/octet-stream;charset=UTF-8");
// 写入PDF文档
PdfWriter.getInstance(doc, outputStream);
//开启文档
doc.open();
// 循环获取图片文件夹内的图片
if (CollectionUtil.isNotEmpty(imageList)) {
for (BufferedImage bufferedImage : imageList) {
// 实例化图片
Image image = Image.getInstance(bufferedImage, null);
//设置图片居中显示
image.setAlignment(Image.MIDDLE);
// 添加图片到文档
doc.add(image);
// 换行,增加间距
doc.add(new Paragraph("\n"));
}
}
// 关闭文档
doc.close();
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
toPdf("D:/", "D:/test.pdf");
}
}
将4张图片合并到一个pdf下载到本地和通过浏览器下载
本文地址:https://blog.csdn.net/qq_39940205/article/details/112212488