1、简介

有时候我们需要在程序中使用到office的转换和预览功能,本文就针对这个需求记录了较为简单的office转换和功能:jodconverter。当然也有aspose和其他开源第三方(kkfileview),jodconverter是免费的,aspose需要付费。

2、SpringBoot集成jodconverter实战

2.1、首先下载好OpenOffice或LibreOffice,并在pom.xml引入相关依赖

<!--转换工具-->

<dependency>

  <groupId>org.jodconverter</groupId>

  <artifactId>jodconverter-spring-boot-starter</artifactId>

  <version>4.4.2</version>

</dependency>

<dependency>

  <groupId>org.jodconverter</groupId>

  <artifactId>jodconverter-local</artifactId>

  <version>4.4.2</version>

</dependency>

<dependency>

  <groupId>org.jodconverter</groupId>

  <artifactId>jodconverter-core</artifactId>

  <version>4.4.2</version>

</dependency>

2.2、在application.yml设置相关参数

jodconverter:

local:

enabled: true

# libreOffice根目录

officeHome: E:\soft\libreoffice

# 任务执行的超时时间

taskExecutionTimeout: 86400000

# 任务队列的超时时间

taskQueueTimeout: 86400000

# 端口(线程)

portNumbers: [2001,2002,2003]

# 一个进程的超时时间

processTimeout: 86400000

2.3、代码

@RequestMapping(value = "/preview")

@ResponseBody

public void preview(MultipartFile file, HttpServletResponse response) {

  if (file == null) {

    return;

  }

  InputStream inputStream = null;

  OutputStream outputStream = null;

  try {

    inputStream = file.getInputStream();

    outputStream = response.getOutputStream();

    String fileName = file.getOriginalFilename();

    if (StrUtil.endWithAnyIgnoreCase(fileName, ".doc", ".docx", ".xls", ".xlsx", ".csv", ".ppt", ".pptx")) {

      //转为PDF

      documentConverter.convert(inputStream).to(outputStream)

        .as(documentConverter.getFormatRegistry().getFormatByExtension("pdf")).execute();

    } else if (StrUtil.endWithAnyIgnoreCase(fileName, ".pdf", ".txt", ".xml", ".md", ".json", ".html", ".htm",

      ".gif", ".jpg", ".jpeg", ".png", ".ico", ".bmp")) {

      IoUtil.copy(inputStream, outputStream);

    } else {

      outputStream.write("暂不支持预览此类型附件".getBytes());

    }

  } catch (IORuntimeException e) {

    log.error("附件预览IO运行异常:{}", e.getMessage());

  } catch (IOException e) {

    log.error("附件预览IO异常:{}", e.getMessage());

  } catch (OfficeException e) {

    log.error("附件预览Office异常:{}", e.getMessage());

  } finally {

    IOUtils.closeQuietly(inputStream);

  }

  IoUtil.writeUtf8(outputStream, true);

}

2.4、效果演示

  2.4.1、在浏览器输入http://ip地址:端口号/file/index。

  2.4.2、上传附件,点击“选择文件”上传需要转换文件。

  2.4.3、点击“预览”,效果如下

SpringBoot使用libreoffice转换PDF的更多相关文章

  1. libreoffice转换文件为pdf文件乱码问题解决办法

    最近系统需要一个office文件预览功能 解决方案为使用libreoffice将office文件转换为pdf文件,然后使用swftools将pdf文件转换为swf文件 最后在前台使用flexpaper ...

  2. 利用LibreOffice转换ppt、doc转化pdf

    利用LibreOffice转换ppt.doc转化pdf LibreOffice下载地址:  http://www.libreoffice.org/download/libreoffice-fresh/ ...

  3. [错误解决] Libreoffice转换不成功,直接不做任何操作

    问题描述: Libreoffice在版本5.3.0之前都存在这个问题.现象是:当你运行其中一个LibreOffice的时候,再运行另外一个Libreoffice转换时,将不做任何操作. 解决方案: 如 ...

  4. SharePoint 2013 Word 转换PDF服务介绍及示例

    前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有 ...

  5. SharePoint Word 转换PDF服务介绍及示例

    前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有 ...

  6. python3图片裁剪+转换pdf+压缩

    本地大量长图,要发送给别人,所以要对图片进行裁剪+转换pdf+压缩 import zipfile import os from concurrent.futures import ThreadPool ...

  7. 将页面内容转换Pdf\Word\Excel格式

    项目中用到了将邮件内容转换为Pdf.Word.Excel格式,做为邮件附件发送. 查了一些解决方案,走了一些弯路.以此代码记录下. 转换PDF需要下载NReco.PdfGenerator.dll 以下 ...

  8. openoffice excel word 转换pdf 支持本地调用和远程调用

    OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...

  9. 文件在线预览doc,docx转换pdf(一)

    文件在线预览doc,docx转换pdf(一) 1. 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库 ...

随机推荐

  1. Node.js精进(6)——文件

    文件系统是一种用于向用户提供底层数据访问的机制,同时也是一套实现了数据的存储.分级组织.访问和获取等操作的抽象数据类型. Node.js 中的fs模块就是对文件系统的封装,整合了一套标准 POSIX ...

  2. Codeforces Round #779 (Div. 2)

    A 题目连接 题目大意 给一个01串,其中每一个长度大于等于2的子区间中0的数量不大于1的数量,最少插入多少1 思路 寻找 00 和 010 00 -->0110     加2 010 --&g ...

  3. Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades(KDD20)

    Cascade-LSTM是一个用于虚假信息级联检测的树结构神经分类器,它本质上是一个谣言(假新闻)检测模型,它将谣言检测任务视为一个树分类问题. Cascade-LSTM在递归神经网络(本文具体基于T ...

  4. 编程思想转换&体验Lambda的更优写法和Lambda标准格式

    编程思想转换做什么,而不是怎么做 我们真的希望创建一个匿名内部类对象吗?不,我们只是为了做这件事情而不得不创建一个对象. 我们真正希望做的事情是:将run方法体内的代码传递给Thread类知晓. 传递 ...

  5. ShardingSphere数据库读写分离

    码农在囧途 最近这段时间来经历了太多东西,无论是个人的压力还是个人和团队失误所带来的损失,都太多,被骂了很多,也被检讨,甚至一些不方便说的东西都经历了,不过还好,一切都得到了解决,无论好坏,这对于个人 ...

  6. USB转串口参数配置功能

    当使用USB转串口芯片时,在部分场合下需要修改芯片内部的USB参数以满足其应用需要.常见如: 系统下使用多个USB转串口芯片,区分使用各芯片. 修改厂商ID.产品ID.厂商字符串,使用客户自有ID和信 ...

  7. 精心总结十三条建议,帮你创建更合适的MySQL索引

    上篇文章讲到使用MySQL的Explain命令可以分析SQL性能瓶颈,优化SQL查询,以及查看是否用到了索引. 我们都知道创建索引可以提高查询效率,但是具体该怎么创建索引? 哪些字段适合创建索引? 哪 ...

  8. 【原创】Python 使用jmpy模块加密|加固 python代码

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 使用jmpy模块 将py文件加密为so或 ...

  9. MySQL Test Run 测试框架介绍

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 介绍 MySQL Test Run 简称MTR,是MySQL官方提供的自动化测试框架,执行脚本在发布路径的mysql-te ...

  10. AtCoder Educational DP Contest 总结

    前言 感觉都初一升初二了,再做这个题是不是有点太菜了啊-- 里面大概都是些 DP 板子题(确信,题目质量还挺高的,不过不涉及太难的优化(实际上只有最后一题是斜率优化). 不管了,还是写个 blog 来 ...