利用java实现一个图片转PDF文件工具

出于某些需求需要将一张简单的图片转换为PDF的文件格式,因此自己动手写了一个图片转换PDF的系统,现在将该系统分享在这里,供大家参考。

(学习视频推荐:java课程)

具体代码:

引入依赖:

<!--该项目以SpringBoot为基础搭建-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/>
</parent>

<dependencies>
	<!--SpringMVC的依赖,方便我们可以获取前端传递过来的文件信息-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--ITextPdf,操作PDF文件的工具类-->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.4.2</version>
    </dependency>
</dependencies>

前端页面:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>图片转换Pdf</title>
    <style>
        .submitButton {
            margin-top: 20px;
            margin-left: 150px;
            background-color: #e37e10;
            border-radius: 10px;
            border: 1px solid #ff8300;
        }
    </style>
</head>
<body>
    <div style="text-align: center">
        <h1>图片转换pdf工具</h1>
        <form action="/pdf/image/to" enctype="multipart/form-data" method="post" onsubmit="return allowFileType)">
            <input type="file" id="file" name="file" placeholder="请选择图片" onchange="allowFileType)" style="border: 1px solid black;"><br>
            <input type="submit" value="一键转换pdf文件">
        </form>
    </div>
</body>
<script>
    function allowFileType) {
        let file = document.getElementById"file").files[0];
        let fileName = file.name;
        console.logfileName)
        let fileSize = file.size;
        console.logfileSize)
        let suffix = fileName.substringfileName.lastIndexOf"."),fileName.length);
        if'.jpg' != suffix && '.png' != suffix) {
            alert"目前只允许传入.jpg或者.png格式的图片!");
            return false;
        }
        iffileSize > 2*1024*1024) {
            alert"上传图片不允许超过2MB!");
            return false;
        }
        return true;
    }
</script>
</html>

(推荐教程:java入门教程)

控制层接口

package com.hrp.controller;

import com.hrp.util.PdfUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;

/**
 * @description: 用于处理Pdf相关的请求
 */
@Controller
@RequestMapping"pdf")
public class PdfController {

    @PostMapping"image/to")
    public void imageToPdf@RequestParam"file") MultipartFile file,HttpServletResponse response) throws Exception{
        PdfUtils.imageToPdffile,response);
    }

}

PDF工具类

package com.hrp.util;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;


/**
 * @description: pdf相关的工具类
 */
@Component
public class PdfUtils {

    /**
     * 图片转换PDF的公共接口
     *
     * @param file     SpringMVC获取的图片文件
     * @param response HttpServletResponse
     * @throws IOException       IO异常
     * @throws DocumentException PDF文档异常
     */
    public static void imageToPdfMultipartFile file, HttpServletResponse response) throws IOException, DocumentException {
        File pdfFile = generatePdfFilefile);
        downloadPdfFilepdfFile, response);
    }

    /**
     * 将图片转换为PDF文件
     *
     * @param file SpringMVC获取的图片文件
     * @return PDF文件
     * @throws IOException       IO异常
     * @throws DocumentException PDF文档异常
     */
    private static File generatePdfFileMultipartFile file) throws IOException, DocumentException {
        String fileName = file.getOriginalFilename);
        String pdfFileName = fileName.substring0, fileName.lastIndexOf".")) + ".pdf";
        Document doc = new DocumentPageSize.A4, 20, 20, 20, 20);
        PdfWriter.getInstancedoc, new FileOutputStreampdfFileName));
        doc.open);
        doc.newPage);
        Image image = Image.getInstancefile.getBytes));
        float height = image.getHeight);
        float width = image.getWidth);
        int percent = getPercentheight, width);
        image.setAlignmentImage.MIDDLE);
        image.scalePercentpercent);
        doc.addimage);
        doc.close);
        File pdfFile = new FilepdfFileName);
        return pdfFile;
    }

    /**
     *
     * 用于下载PDF文件
     *
     * @param pdfFile  PDF文件
     * @param response HttpServletResponse
     * @throws IOException IO异常
     */
    private static void downloadPdfFileFile pdfFile, HttpServletResponse response) throws IOException {
        FileInputStream fis = new FileInputStreampdfFile);
        byte[] bytes = new byte[fis.available)];
        fis.readbytes);
        fis.close);

        response.reset);
        response.setHeader"Content-Type", "application/pdf");
        response.setHeader"Content-Disposition", "attachment; filename=" + URLEncoder.encodepdfFile.getName), "UTF-8"));
        OutputStream out = response.getOutputStream);
        out.writebytes);
        out.flush);
        out.close);
    }


    /**
     * 等比压缩,获取压缩百分比
     *
     * @param height 图片的高度
     * @param weight 图片的宽度
     * @return 压缩百分比
     */
    private static int getPercentfloat height, float weight) {
        float percent = 0.0F;
        if height > weight) {
            percent = PageSize.A4.getHeight) / height * 100;
        } else {
            percent = PageSize.A4.getWidth) / weight * 100;
        }
        return Math.roundpercent);
    }
}

实现效果:

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注