Java实现将图片转换成PDF

1.引入依赖

xml 复制代码
<dependency>
   <groupId>org.apache.pdfbox</groupId>
   <artifactId>pdfbox</artifactId>
   <version>2.0.24</version>
</dependency>

2.工具方法

java 复制代码
package com.prescription.transfer.system.utils;

import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class ImgToPdf {

    /**
     * 图片转Pdf
     *
     * @param imgFile
     * @return
     * @throws IOException
     */
    public static File getPdfFile(File imgFile, String filePath) throws IOException {
        File outputFile = new File(filePath);
        genPdf(readBytesFromFile(imgFile), outputFile);
        return outputFile;
    }

    private static void genPdf(byte[] imageBytes, File outputFile) throws IOException {
        PDDocument document = new PDDocument();
        //2. 生成一页 PDF document
        PDImageXObject image = PDImageXObject.createFromByteArray(document, imageBytes, "image");
        // 这里是你生成PDF自适应图片大小,不设置会默认为A4
        PDRectangle pageSize = new PDRectangle(image.getWidth(), image.getHeight());
        PDPage page = new PDPage(pageSize);

        document.addPage(page);
        // 3.将 图片 添加进PDF document
        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        float pageWidth = pageSize.getWidth();
        float pageHeight = pageSize.getHeight();
        float imageWidth = image.getWidth();
        float imageHeight = image.getHeight();
        float scale = Math.min(pageWidth / imageWidth, pageHeight / imageHeight);
        float scaledWidth = imageWidth * scale;
        float scaledHeight = imageHeight * scale;
        float x = (pageWidth - scaledWidth) / 2;
        float y = (pageHeight - scaledHeight) / 2;
        // 这里是将你的图片填充入pdf页
        contentStream.drawImage(image, x, y, scaledWidth, scaledHeight);
        contentStream.close();
        document.save(outputFile);
        document.close();
    }

    /**
     * 从文件读取字节
     *
     * @param file 文件
     * @return {@link byte[]}
     * @throws IOException ioexception
     */
    private static byte[] readBytesFromFile(File file) throws IOException {
        FileInputStream inputStream = new FileInputStream(file);
        byte[] bytes = IOUtils.toByteArray(inputStream);
        inputStream.close();
        return bytes;
    }

}
相关推荐
litterfinger10 分钟前
【面试经验】网易 java开发实习 一面 已offer
java·面试·职场和发展
Freeking102418 分钟前
正则表达式工具类
java·开发语言·正则表达式
一只懒鱼a38 分钟前
SpringBoot之外部化配置
java·spring boot·后端·spring
张天龙38 分钟前
【SpringBoot】数据验证之分组校验
java·服务器·前端·spring boot
小码王科技41 分钟前
免费【2024】springboot 二手家电管理平台的设计与实现
java·spring boot·后端·毕业设计
Slow菜鸟43 分钟前
SpringBoot教程(二十) | SpringBoot整合异步任务
java·spring boot·后端
Lullaby—1 小时前
JavaEE-多线程编程&线程池
java·java-ee
一个热爱java的小白1 小时前
了解MVCC
java·数据库·mysql
姜君竹1 小时前
安卓控件RecyclerVieW
android·java·开发语言·学习
A22741 小时前
十一、外观模式
java·设计模式·外观模式