SpringBoot使用libreoffice转换PDF
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的更多相关文章
- libreoffice转换文件为pdf文件乱码问题解决办法
最近系统需要一个office文件预览功能 解决方案为使用libreoffice将office文件转换为pdf文件,然后使用swftools将pdf文件转换为swf文件 最后在前台使用flexpaper ...
- 利用LibreOffice转换ppt、doc转化pdf
利用LibreOffice转换ppt.doc转化pdf LibreOffice下载地址: http://www.libreoffice.org/download/libreoffice-fresh/ ...
- [错误解决] Libreoffice转换不成功,直接不做任何操作
问题描述: Libreoffice在版本5.3.0之前都存在这个问题.现象是:当你运行其中一个LibreOffice的时候,再运行另外一个Libreoffice转换时,将不做任何操作. 解决方案: 如 ...
- SharePoint 2013 Word 转换PDF服务介绍及示例
前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有 ...
- SharePoint Word 转换PDF服务介绍及示例
前言:在SharePoint使用过程中,经常会发现将文档进行格式转换的需求,之前,看到SharePoint 2013有将PPT转换PDF文档的服务,后来,才发现SharePoint 2010开始,就有 ...
- python3图片裁剪+转换pdf+压缩
本地大量长图,要发送给别人,所以要对图片进行裁剪+转换pdf+压缩 import zipfile import os from concurrent.futures import ThreadPool ...
- 将页面内容转换Pdf\Word\Excel格式
项目中用到了将邮件内容转换为Pdf.Word.Excel格式,做为邮件附件发送. 查了一些解决方案,走了一些弯路.以此代码记录下. 转换PDF需要下载NReco.PdfGenerator.dll 以下 ...
- openoffice excel word 转换pdf 支持本地调用和远程调用
OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...
- 文件在线预览doc,docx转换pdf(一)
文件在线预览doc,docx转换pdf(一) 1. 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库 ...
随机推荐
- 工具箱之 IKVM.NET 项目新进展
在各种群里经常讨论的一个事情是.NET 如何调用 Java 的实现,最常见的场景之一就是在加解密方面Java提供的密钥,C#无法解密, C#中byte范围是[0,255],而Java中的byte范围是 ...
- mysql中in的用法详解
一.基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据. select * from where field in (value1,value2,value3,-) 当 ...
- 如何用python做出老师看了都给满分的GUI学生管理系统毕设
序 言 哈喽大家好鸭!我是小熊猫 最近有什么有趣的事情发生吗?快来说给我听听( •̀ ω •́ )✧表弟大学快毕业了,学了一个学期Python居然还不会写学生管理系统,真的给我丢脸啊,教他又不肯学,还 ...
- elasticsearchTemplate that could not be found
***************************APPLICATION FAILED TO START*************************** Description: Metho ...
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader.findCla ...
- SQLZOO练习5--join(表的连接)
game表: id mdate stadium team1 team2 1001 8 June 2012 National Stadium, Warsaw POL GRE 1002 8 June 20 ...
- CF1381B Unmerge(位运算的作用)
题目大意: 给定长度为 \(2n\) 的排列 \(p\) .确定是否存在两个数组 \(a\) 和 \(b\) ,每个数组的长度都为 \(n\) ,并且没有相等的元素,使得 \(p = \operato ...
- .net6与英雄联盟邂逅之——根据官方LCU API制作游戏助手
看了网上很多自己开发的英雄联盟的小助手工具,当时苦于没有api,自己也想做一个.后来发现了其实拳头本身就提供了LCU API在客户端运行的时候会暴露出来. 现在我们就来了解下工具的实现. 查询数据:h ...
- el-form 每行显示两列,底部按钮居中
需求: el-form 每行显示两列,底部按钮居中 问题: 以前的解决办法是: el-col, el-row.但是这里只有一个 el-form-item 的 label 数据是已知的,其余项都是循环得 ...
- Apache DolphinScheduler 使用文档(5/8):使用与测试
本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 5. 使用与测试 5.1 安全中心(Security) ...