背景:

项目需要加新功能,所以查了一下博客里的相关资料,但是感觉很多写的都不够详细,需要参考很多篇文章才能写出来,于是就写这篇文章当作是笔记记录下来,以防以后项目需要用到又忘记了。

开发步骤(直接上代码):

一、下载并安装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再转图片相关推荐

  1. Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档

    Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...

  2. 微信公众号如何上传PPT文件【教程】

    公众号如何上传PPT文件给粉丝下载?相信这是很多做运营小编的困惑.公众号自身并不支持在公众号图文中上传文件,只支持在文章里添加图片.文字.视频号.小程序等内容,对于文件,并不支持.需要在公众号图文中上 ...

  3. 关于tomcat环境下上传大文件遇到的问题及解决办法

    转载自:http://blog.csdn.net/tqwwilliam/article/details/7108247 问题描述: 关于tomcat环境下上传大文件遇到的问题及解决办法 解决方案: 1 ...

  4. linux 传文件夹,linux下上传下载文件夹的方法

    Linux下目录复制:本机->远程服务器 scp -r /home/shaoxiaohu/test1 zhidao@192.168.0.1:/home/test2 test1为源目录,test2 ...

  5. springboot实现上传Excel文件与数据库中的数据进行比对

    springboot实现上传Excel文件与数据库中的数据进行比对 首先先写好文件上传的接口,然后上传需要比对数据的文件,在点击数据比对 下面是一部分数据比对的代码: 后端controller部分: ...

  6. SpringBoot如何上传大文件

    最近遇见一个需要上传超大大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  7. windows下上传ipa文件到开发者中心的方法

    随着h5技术和vue技术的流行,现在越来越多人喜欢试用hbuilder.uniapp或apicloud这些框架或工具来生成ios的app,这些工具会帮我们生成一个ipa文件. 假如我们有mac电脑,我 ...

  8. Springboot 用户上传头像文件

    因项目中需要在添加用户.修改用户时上传用户头像,并显示出来. 详细代码如下: 一.controller层 /*** @Author: liumce* @Description: 头像上传功能控制* @ ...

  9. git : 上传大文件或者PDF或者二进制文件导致无法上传

    参考: https://blog.csdn.net/quiet_girl/article/details/79487966 git push 时,存在大文件会报错,即使删除大文件后,还会报错.主要是因 ...

  10. 微信公众号如何上传PPT?

    微信公众号上传ppt文件,点击ppt文件名字,浏览ppt,下载ppt. 通过微附件小程序,很容易就可以实现. 详细操作: 1.进入官方网站,上传附件,注意一下路径,后面要用. 2.已关联过小程序的按照 ...

最新文章

  1. 如何设计四象限电压转换电路?
  2. C语言volatile关键字详解
  3. Java并发编程的艺术,解读并发编程的优缺点
  4. pythonelectron桌面开发案例_electron vue桌面应用入门实例
  5. 使用xtrabackup(innobackupex)实现MySQL的热备
  6. java 程序打包成jar_Java程序打包成jar包
  7. Galaxy Note 20新爆料:至少有两款机型,处理器高低配
  8. redis的hash类型
  9. P1350 车的放置
  10. 华为鸿蒙重磅更新,华为重磅官宣!鸿蒙系统升级机型遭曝光:多达55款产品支持升级...
  11. 基于STM32F405平台的多摩川协议编码器通讯过程(2)
  12. 图解网络(一)——计算机网络基础
  13. threejs的环境光+点光源+平行光源+球面光 以及hepler理解+阴影()
  14. 压在redis身上的三座大山
  15. AHRS和INS的区别
  16. 产品经理与工程师的换位思考
  17. h5互动小游戏定制开发流程
  18. xbox360链接pc_如何在Windows PC上使用Xbox One控制器
  19. Dr.com 新版 Ver 5.2.0 本地 密码 读取 查看 破解
  20. git pull常见操作

热门文章

  1. Canvas动画案例演示,含动画猫、变幻线、代码雨等
  2. PayPal贝宝集成
  3. 鼠标滑入滑出判断事件(转自流云诸葛)
  4. 只有加法也能做深度学习,北大、华为等提出AdderNet,性能不输传统CNN
  5. Pipline 中的Hazard, Forwarding, Stall, Flush和其他
  6. PS非常火焰的火焰字效果
  7. windows下AS常用快捷键
  8. 模仿6ecc 主页 主体部分(查看附件点击6eccHTML 就会看到如下页面效果)
  9. ELK日志分析平台之kibana以及借助ELK平台实现网站访问量统计
  10. 2017年sfdc工作总结_Name 顺序