Maison >Java >Javacommencer >Utiliser Java pour implémenter un outil permettant de convertir des images en fichiers PDF

Utiliser Java pour implémenter un outil permettant de convertir des images en fichiers PDF

王林
王林avant
2020-08-27 16:05:233641parcourir

Utiliser Java pour implémenter un outil permettant de convertir des images en fichiers PDF

Pour certains besoins, j'ai besoin de convertir une simple image au format de fichier PDF, j'ai donc écrit un système pour convertir des images en PDF. Maintenant, je partage le système ici, pour votre référence.

(Recommandation vidéo d'apprentissage : cours java)

Code spécifique :

Présentation des dépendances :

<!--该项目以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>

Front- fin de page :

<!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.log(fileName)
        let fileSize = file.size;
        console.log(fileSize)
        let suffix = fileName.substring(fileName.lastIndexOf("."),fileName.length);
        if(&#39;.jpg&#39; != suffix && &#39;.png&#39; != suffix) {
            alert("目前只允许传入.jpg或者.png格式的图片!");
            return false;
        }
        if(fileSize > 2*1024*1024) {
            alert("上传图片不允许超过2MB!");
            return false;
        }
        return true;
    }
</script>
</html>

(Tutoriel recommandé : Tutoriel d'introduction à Java)

Interface de la couche de contrôle

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.imageToPdf(file,response);
    }

}

Classe d'outils 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 imageToPdf(MultipartFile file, HttpServletResponse response) throws IOException, DocumentException {
        File pdfFile = generatePdfFile(file);
        downloadPdfFile(pdfFile, response);
    }

    /**
     * 将图片转换为PDF文件
     *
     * @param file SpringMVC获取的图片文件
     * @return PDF文件
     * @throws IOException       IO异常
     * @throws DocumentException PDF文档异常
     */
    private static File generatePdfFile(MultipartFile file) throws IOException, DocumentException {
        String fileName = file.getOriginalFilename();
        String pdfFileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".pdf";
        Document doc = new Document(PageSize.A4, 20, 20, 20, 20);
        PdfWriter.getInstance(doc, new FileOutputStream(pdfFileName));
        doc.open();
        doc.newPage();
        Image image = Image.getInstance(file.getBytes());
        float height = image.getHeight();
        float width = image.getWidth();
        int percent = getPercent(height, width);
        image.setAlignment(Image.MIDDLE);
        image.scalePercent(percent);
        doc.add(image);
        doc.close();
        File pdfFile = new File(pdfFileName);
        return pdfFile;
    }

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

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


    /**
     * 等比压缩,获取压缩百分比
     *
     * @param height 图片的高度
     * @param weight 图片的宽度
     * @return 压缩百分比
     */
    private static int getPercent(float 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.round(percent);
    }
}

Effet de réussite :

Utiliser Java pour implémenter un outil permettant de convertir des images en fichiers PDF

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer