欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

多张图片合并转为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");
    }
}

多张图片合并转为PDF

将4张图片合并到一个pdf下载到本地和通过浏览器下载

多张图片合并转为PDF

本文地址:https://blog.csdn.net/qq_39940205/article/details/112212488