共计 5146 个字符,预计需要花费 13 分钟才能阅读完成。
引入依赖
<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 转换为图片的工具类 | |
*/ | |
@Component | |
public 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); | |
} | |
} | |
} | |
} | |
} |
正文完