图片插入pdf功能

790 阅读1分钟
<!-- pdf工具 -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.10</version>
</dependency>
<!-- pdf输出中文工具 -->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>
package com.lcb.lcbtest.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;

import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class PdfUtil {
    /**
     * pdf插入图片
     * @param savePath
     * @param files
     */
    public static void creatPDF(String savePath,List<File> files) {
        //创建一个文档对象
        Document doc = new Document();
        try {
            //定义输出文件的位置
            PdfWriter.getInstance(doc, new FileOutputStream(savePath));
            //开启文档
            doc.open();
            for(int i=0;i<files.size();i++) {
                File file = files.get(i);
                //根据后缀判断是否是图片
                String fileName = file.getName().toLowerCase();
                if(fileName.contains(".png") || fileName.contains(".jpg")
                        || fileName.contains(".jpeg")){
                    Image img = Image.getInstance(file.getAbsolutePath()); //原来的图片的路径
                    //获得图片的高度
                    float heigth = img.getHeight();
                    float width = img.getWidth();
                    //统一按照宽度压缩
                    int percent=getPercent(heigth, width);
                    //设置图片居中显示
                    img.setAlignment(Image.MIDDLE);
                    //按百分比显示图片的比例
                    img.scalePercent(percent);//表示是原来图像的比例;
                    doc.add(img);
                }
            }
        } catch (Exception e) {
            log.error(getStackTrace(e));
        }
        finally {
            //关闭文档并释放资源
            doc.close();
        }
    }

    /**
     * 图片高度和宽度
     * @param h
     * @param w
     * @return
     */
    public static int getPercent(float h,float w) {
        int p=0;
        float p2=0.0f;
        p2=530/w*100;
        p=Math.round(p2);
        return p;
    }

    /**
     * 打印异常信息
     * @param t
     * @return
     */
    public static String getStackTrace(Throwable t) {
        StringWriter sw = new StringWriter();
        PrintWriter pw = new PrintWriter(sw);
        try {
            t.printStackTrace(pw);
            return sw.toString();
        } finally {
            pw.close();
        }
    }

    public static void main(String[] args) {
        List<File> files = new ArrayList<>();
        File f1 = new File("D:\test\baidu.png");
        files.add(f1);
        File f2 = new File("D:\test\test1.jpeg");
        files.add(f2);
        creatPDF("D:\test\test.pdf",files);
    }
}