引入依赖
<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> <!--icepdf,用来将pdf文件转换为图片的依赖--> <dependency> <groupId>org.icepdf.os</groupId> <artifactId>icepdf-core</artifactId> <version>6.2.2</version> </dependency></dependencies>
前端页面
<!DOCTYPE html><html lang="en"><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/to/image" enctype="multipart/form-data" method="post" onsubmit="return allowFileType()"> <input type="file" id="file" name="file" placeholder="请抉择PDF文件" onchange="allowFileType()" style="border: 1px solid black;"><br> <input type="submit" value="一键转换图片" class="submitButton"> </form></div></body><script> function allowFileType() { let file = document.getElementById("file").files[0]; let fileName = file.name; let suffix = fileName.substring(fileName.lastIndexOf("."),fileName.length).toLowerCase(); if('.pdf' != suffix) { alert("只容许传入PDF格局的文件!"); return false; } return true; }</script></html>
管制层接口
外汇MT4教程https://www.kaifx.cn/mt4.html
package com.hrp.controller;import com.hrp.util.ImageUtils;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("to/image") public void pdfToImage(@RequestParam("file") MultipartFile file,HttpServletResponse response) throws Exception{ ImageUtils.pdfToImage(file,response); }}
Image工具类
package com.hrp.util;import org.icepdf.core.pobjects.Document;import org.icepdf.core.pobjects.Page;import org.icepdf.core.util.GraphicsRenderingHints;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletResponse;import java.awt.image.BufferedImage;import java.io.*;import java.net.URLEncoder;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;/** * @description: PDF转换为图片的工具类 */@Componentpublic class ImageUtils { /** * 图片文件格式 */ public static final String FORMAT_NAME = "png"; /** * 图片文件后缀名 */ public static final String PNG_SUFFIX = ".png"; /** * 压缩文件后缀名 */ public static final String ZIP_SUFFIX = ".zip"; /** * 对外的凋谢接口,用于将PDF文件转换为图片文件压缩包进行下载 * * @param file SpringMVC获取的图片文件 * @param response * @throws Exception */ public static void pdfToImage(MultipartFile file, HttpServletResponse response) throws Exception { File zipFile = generateImageFile(file); downloadZipFile(zipFile, response); } /** * 将PDF文件转换为多张图片并放入一个压缩包中 * * @param file SpringMVC获取的图片文件 * @return 图片文件压缩包 * @throws Exception 抛出异样 */ private static File generateImageFile(MultipartFile file) throws Exception { String fileName = file.getOriginalFilename(); Document document = new Document(); document.setByteArray(file.getBytes(), 0, file.getBytes().length, fileName); List<File> fileList = new ArrayList<>(); for (int i = 0; i < document.getNumberOfPages(); i++) { BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, 0F, 2.5F); File imageFile = new File((i + 1) + PNG_SUFFIX); ImageIO.write(image, FORMAT_NAME, imageFile); image.flush(); fileList.add(imageFile); } document.dispose(); String directoryName = fileName.substring(0, fileName.lastIndexOf(".")); File zipFile = new File(directoryName + ZIP_SUFFIX); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile)); zipFile(fileList, zos); zos.close(); return zipFile; } /** * 下载zip文件 * * @param zipFile zip压缩文件 * @param response HttpServletResponse * @throws IOException IO异样 */ private static void downloadZipFile(File zipFile, HttpServletResponse response) throws IOException { FileInputStream fis = new FileInputStream(zipFile); byte[] bytes = new byte[fis.available()]; fis.read(bytes); fis.close(); response.reset(); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", "application/x-msdownload"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(zipFile.getName(), "UTF-8")); OutputStream out = response.getOutputStream(); out.write(bytes); out.flush(); out.close(); zipFile.delete(); } /** * 压缩文件 * * @param inputFiles 具体须要压缩的文件汇合 * @param zos ZipOutputStream对象 * @throws IOException IO异样 */ private static void zipFile(List<File> inputFiles, ZipOutputStream zos) throws IOException { byte[] buffer = new byte[1024]; for (File file : inputFiles) { if (file.exists()) { if (file.isFile()) { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); zos.putNextEntry(new ZipEntry(file.getName())); int size = 0; while ((size = bis.read(buffer)) > 0) { zos.write(buffer, 0, size); } zos.closeEntry(); bis.close(); file.delete(); } else { File[] files = file.listFiles(); List<File> childrenFileList = Arrays.asList(files); zipFile(childrenFileList, zos); } } } }}