900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【Java实现PDF文件转换为图片】

【Java实现PDF文件转换为图片】

时间:2022-06-16 19:01:11

相关推荐

【Java实现PDF文件转换为图片】

目录

一、实现功能及开发环境描述1、实现功能2、开发环境二、代码实现1、引入pom依赖2、前端页面3、控制层接口4、PDF工具类

一、实现功能及开发环境描述

1、实现功能

上传PDF文件后,将每页的PDF页面转换为指定格式的图片文件,并将 PDF文件及图片保存到指定的本地磁盘路径。

2、开发环境

此处描述的开发环境并非都为必要条件,仅作为参考,方便其他开发人员排查因版本不同出现的问题。

Windows10-64位

JDK-1.8

Maven-3.3.9

数据库:Oracle Database 19c

二、代码实现

1、引入pom依赖

pom.xml

<!--icepdf,用来将pdf文件转换为图片的依赖--><dependency><groupId>org.icepdf.os</groupId><artifactId>icepdf-core</artifactId><version>6.2.2</version></dependency>

2、前端页面

pdf2pic.html

<!DOCTYPE html><html><meta charset="utf-8"><head th:include="include :: header"></head><body class="gray-bg"><form class="form-horizontal m-t" id="signupForm" enctype="multipart/form-data"><div class="form-group"><div class="col-sm-4" nowrap ><input name="picture" id="picture" type="file" placeholder="请选择PDF文件" onchange="allowFileType()" /></div><div class="col-sm-4 col-sm-offset-3"><button type="submit" class="btn btn-primary">提交</button></div></div></form></body><script type="text/javascript" src="/pdf2pic.js"></script></html>

pdf2pic.js

$.validator.setDefaults({//拦截表单验证成功后的提交表单事件,执行完函数中的代码在提交表单submitHandler : function() {save();}});function save() {/*** 使用FormData表单提交解决serialize不能提交表单中file类型的数据*/$.ajax({type : "POST",url : "/save",data :new FormData(document.getElementById('signupForm')),// data :new FormData($('#picture')),processData: false,contentType: false,async: false,cache: false,//上传文件不需要缓存error : function(request) {parent.layer.alert("Connection error");},success : function(data) {if (data.code == 0) {parent.layer.msg("操作成功");parent.reLoad();var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引parent.layer.close(index);} else {parent.layer.alert(data.msg)}}});}

3、控制层接口

pdf2picController.java

@Log("将pdf转为图片并保存pdf和图片")@ResponseBody@PostMapping("/save")public void save(@RequestParam("picture") MultipartFile pdf) throws Exception {ImageUtils.pdfToImage(pdf);}

4、PDF工具类

PDFUtils

/*** @description: PDF转换为图片的工具类*/@Componentpublic class ImageUtils {//图片文件格式public static final String FORMAT_NAME = "png";//图片文件后缀名public static final String PNG_SUFFIX = ".png";//用于将PDF文件转换为图片文件并保存到本地public static void pdfToImage(MultipartFile file) throws Exception {//1、pdf文件保存到本地String fileName = pdf.getOriginalFilename();fileName = FileUtil.renameToUUID(fileName);FileUtil.uploadFile(pdf.getBytes(), simpleDemoConfig.getUploadPath(), fileName);//2、将图片文件保存到本地Document document = new Document();document.setByteArray(pdf.getBytes(), 0, pdf.getBytes().length, fileName);for (int i = 0; i < document.getNumberOfPages(); i++) {//将磁盘中的图片读取到内存的图像缓冲区中BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN,Page.BOUNDARY_CROPBOX, 0F, 2.5F);//创建一个后缀名为.png的File对象用于保存图片文件File imageFile = new File( UUID.randomUUID() + "-" + (i + 1) + PNG_SUFFIX);//将内存中的图片写入File对象ImageIO.write(image,FORMAT_NAME , imageFile);image.flush();//将File类型转为MultipartFile类型,用于将图片保存到本地文件夹InputStream inputStream = new FileInputStream(imageFile);MultipartFile imgMultipartFile = new MockMultipartFile(imageFile.getName(), inputStream);//将图片保存到本地String imageName = imgMultipartFile.getName();FileOutputStream out = new FileOutputStream(simpleDemoConfig.getUploadPath() + imageName);out.write(imgMultipartFile.getBytes());out.flush();out.close();}document.dispose();}}/*simpleDemoConfig.getUploadPath()路径说明(此处也可直接写入String类型指定路径,以下注释则可忽略)simpleDemoConfig为配置类SimpleDemoConfig的实例@Component@ConfigurationProperties(prefix="config")public class SimpleDemoConfig {private String uploadPath;public String getUploadPath() {return uploadPath;}}实际路径写在application.yml配置文件中config:uploadPath: E:/var/uploaded_files/ */

参考资料:

Java实现PDF文件转换为图片(将图片进行压缩下载)

将File转换成MultipartFile

限于作者水平,如有错误,欢迎批评指正

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。