springboot下,上传PPT文件转pdf再转图片
背景:
项目需要加新功能,所以查了一下博客里的相关资料,但是感觉很多写的都不够详细,需要参考很多篇文章才能写出来,于是就写这篇文章当作是笔记记录下来,以防以后项目需要用到又忘记了。
开发步骤(直接上代码):
一、下载并安装openoffice(以4.1.6版本为例)
openoffice有Windows和Linux系统的相应安装文件,下载地址:
https://www.openoffice.org/download/index.html
1、Windows安装
直接运行下载的Apache_OpenOffice_4.1.6_Win_x86_install_zh-CN.exe文件,需要记住安装的目录,因为要配置到代码中,我这里是默认安装到C盘
C:\Program Files (x86)\OpenOffice 4
2、Linux安装(以centos7为例)
在centos下,将Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz文件解压出来,会得到一个zh-CN文件夹,开始执行安装命令,安装目录为/opt/openoffice4
# 安装
cd zh-CN/RPMS
rpm -ivh *.rpm
cd desktop-integration
rpm -ivh openoffice4.1.6-redhat-menus-4.1.6-9790.noarch.rpm# 启动
cd /opt/openoffice4/program
nohup soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &# 查看启动结果,有记录则表示运行成功
netstat -lnp |grep 8100
二、整合springboot
pom.xml文件添加相关依赖
<!-- PDF转图片 --><dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.12</version></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.12</version></dependency><!-- PDF转图片 --><!-- PPT转PDF --><!--jodconverter 核心包 --><!-- https://mvnrepository.com/artifact/org.jodconverter/jodconverter-core --><dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-core</artifactId><version>4.2.2</version></dependency><!--springboot支持包,里面包括了自动配置类 --><!-- https://mvnrepository.com/artifact/org.jodconverter/jodconverter-spring-boot-starter --><dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-spring-boot-starter</artifactId><version>4.2.2</version></dependency><!--jodconverter 本地支持包 --><!-- https://mvnrepository.com/artifact/org.jodconverter/jodconverter-local --><dependency><groupId>org.jodconverter</groupId><artifactId>jodconverter-local</artifactId><version>4.2.2</version></dependency><!-- PPT转PDF -->
application.yml添加配置
jodconverter:local:# linux(centos)环境下的openoffice安装目录# office-home: /opt/openoffice4# windows环境下的openoffice安装目录office-home: C:/Program Files (x86)/OpenOffice 4max-tasks-per-process: 10port-numbers: 8100enabled: true
创建工具类
package com.hq.pms.utils;import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.jodconverter.DocumentConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @ClassName OfficeUtil* @Author: Winston* @Description: TODO* @Date:Create:in 2019/8/20 11:57* @Version:*/
@Slf4j
@Component
public class OfficeUtil {private String OFFICE_SAVE_PATH = "J:/DEV-TOOLS/nginx-1.14.0/html/images/";# 该注入可能会出现红色波浪线报错,但不影响,能够正常编译和运行@Autowiredprivate DocumentConverter converter;/*** @Description: * @param: 上传office文件* @return: * @auther: Winston* @date: 2019/8/20 17:49*/public Map<String, String> excuteUpload(MultipartFile file) {if (!file.isEmpty()) {Map<String, String> res = new HashMap<>();String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);String filename = file.getOriginalFilename();File path = new File(OFFICE_SAVE_PATH);try {if (!path.exists()) {path.mkdirs();}String uploadPath = OFFICE_SAVE_PATH + filename;File excelFile = new File(uploadPath);file.transferTo(excelFile);res.put("fileName", filename);res.put("filePath", uploadPath);res.put("fileType", fileType);return res;} catch (Exception e) {e.printStackTrace();}}return null;}/*** @Description: PPT转PDF* @param:* @return:* @auther: Winston* @date: 2019/8/20 16:25*/public String pptToPdf(String pptPath){File file = new File(pptPath);File pdfFile = null;String pdfPath = "";try {String randomString = StringUtil.getRandomString(5);File newFile = new File(OFFICE_SAVE_PATH);//转换之后文件生成的地址if (!newFile.exists()) {newFile.mkdirs();}pdfPath = OFFICE_SAVE_PATH + randomString + ".pdf";pdfFile = new File(pdfPath);//文件转化converter.convert(file).to(pdfFile).execute();} catch (Exception e) {e.printStackTrace();}return pdfPath;}/*** @Description: PDF转图片* @param:* @return:* @auther: Winston* @date: 2019/8/20 14:23*/public List<Map<String, String>> pdfToImage(String pdfPath) {List<Map<String, String>> list = new ArrayList<>();Map<String, String> resultMap = null;File file = null;PDDocument pdDocument = null;try {int dpi = 296;file = new File(pdfPath);pdDocument = PDDocument.load(file);PDFRenderer renderer = new PDFRenderer(pdDocument);int pageCount = pdDocument.getNumberOfPages();/* dpi越大转换后越清晰,相对转换速度越慢 */for (int i = 0; i < pageCount; i++) {resultMap = new HashMap<>();String randomString = StringUtil.getRandomString(8);String fileName = randomString+ "-" + i+".png";String filePath = OFFICE_SAVE_PATH+ fileName;File dstFile = new File(filePath);BufferedImage image = renderer.renderImageWithDPI(i, dpi);ImageIO.write(image, "png", dstFile);resultMap.put("fileName", fileName);resultMap.put("filePath", filePath);list.add(resultMap);}}catch (Exception e){e.printStackTrace();}finally {try {// 这里需要关闭PDDocument,不然如果想要删除pdf文件时会提示文件正在使用,无法删除的情况pdDocument.close();} catch (IOException e) {e.printStackTrace();}}return list;}}
到这里已经基本完成了,由于我这里的项目需要保存上传的PPT原文件,所以单独写了上传的方法,然后只需要自行添加控制器,上传MultipartFile文件,然后得到本地的文件PPT文件路径,再将该路径传入下一个方法pptToPdf(String pptPath)即可得到转化后的pdf文件,之后再将pdf文件的路径传入pdfToImage(String pdfPath)方法即可按顺序得到pdf里面的图片。
springboot下,上传PPT文件转pdf再转图片相关推荐
- Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档
Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...
- 微信公众号如何上传PPT文件【教程】
公众号如何上传PPT文件给粉丝下载?相信这是很多做运营小编的困惑.公众号自身并不支持在公众号图文中上传文件,只支持在文章里添加图片.文字.视频号.小程序等内容,对于文件,并不支持.需要在公众号图文中上 ...
- 关于tomcat环境下上传大文件遇到的问题及解决办法
转载自:http://blog.csdn.net/tqwwilliam/article/details/7108247 问题描述: 关于tomcat环境下上传大文件遇到的问题及解决办法 解决方案: 1 ...
- linux 传文件夹,linux下上传下载文件夹的方法
Linux下目录复制:本机->远程服务器 scp -r /home/shaoxiaohu/test1 zhidao@192.168.0.1:/home/test2 test1为源目录,test2 ...
- springboot实现上传Excel文件与数据库中的数据进行比对
springboot实现上传Excel文件与数据库中的数据进行比对 首先先写好文件上传的接口,然后上传需要比对数据的文件,在点击数据比对 下面是一部分数据比对的代码: 后端controller部分: ...
- SpringBoot如何上传大文件
最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- windows下上传ipa文件到开发者中心的方法
随着h5技术和vue技术的流行,现在越来越多人喜欢试用hbuilder.uniapp或apicloud这些框架或工具来生成ios的app,这些工具会帮我们生成一个ipa文件. 假如我们有mac电脑,我 ...
- Springboot 用户上传头像文件
因项目中需要在添加用户.修改用户时上传用户头像,并显示出来. 详细代码如下: 一.controller层 /*** @Author: liumce* @Description: 头像上传功能控制* @ ...
- git : 上传大文件或者PDF或者二进制文件导致无法上传
参考: https://blog.csdn.net/quiet_girl/article/details/79487966 git push 时,存在大文件会报错,即使删除大文件后,还会报错.主要是因 ...
- 微信公众号如何上传PPT?
微信公众号上传ppt文件,点击ppt文件名字,浏览ppt,下载ppt. 通过微附件小程序,很容易就可以实现. 详细操作: 1.进入官方网站,上传附件,注意一下路径,后面要用. 2.已关联过小程序的按照 ...
最新文章
- 如何设计四象限电压转换电路?
- C语言volatile关键字详解
- Java并发编程的艺术,解读并发编程的优缺点
- pythonelectron桌面开发案例_electron vue桌面应用入门实例
- 使用xtrabackup(innobackupex)实现MySQL的热备
- java 程序打包成jar_Java程序打包成jar包
- Galaxy Note 20新爆料:至少有两款机型,处理器高低配
- redis的hash类型
- P1350 车的放置
- 华为鸿蒙重磅更新,华为重磅官宣!鸿蒙系统升级机型遭曝光:多达55款产品支持升级...
- 基于STM32F405平台的多摩川协议编码器通讯过程(2)
- 图解网络(一)——计算机网络基础
- threejs的环境光+点光源+平行光源+球面光 以及hepler理解+阴影()
- 压在redis身上的三座大山
- AHRS和INS的区别
- 产品经理与工程师的换位思考
- h5互动小游戏定制开发流程
- xbox360链接pc_如何在Windows PC上使用Xbox One控制器
- Dr.com 新版 Ver 5.2.0 本地 密码 读取 查看 破解
- git pull常见操作