多张图片合并转为PDF

2022-07-25,,,,

需要使用的依赖

        <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

《多张图片合并转为PDF.doc》

下载本文的Word格式文档,以方便收藏与打印。