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. 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库 ...
随机推荐
- 使用Visio 2007画用例图没有include(包含)关系且包含关系使用的线不是虚线的解决办法
使用Visio 2007画用例图没有include(包含)关系且包含关系使用的线不是虚线的解决办法 1 在工具栏选择UML------>选择构造型 如下操作 2 拖动 "扩展" ...
- 未找到与名为“xxx”的控制器匹配的类型。
自己封装了一个BaseApiControllerr把他独立成一个项目出来在引用不行,而用默认自带的ApiControllerr可以. <Error> <Message> 未找到 ...
- day02 IO
JAVA IO java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作. java将IO按照方向划分为输入与输出,参照点是我们写的程序. 输入:用来读取数据的,是从外界到程序的方向,用 ...
- Note -「因数的欧拉函数求和」
归档. 试证明:\(\sum \limits _{d | x} \varphi (d) = x\) Lemma 1. 试证明:\(\sum \limits _{d | p^k} \varphi (d) ...
- day03_3_流程控制练习题
# 流程控制练习题 # 一.编程题 1.实现一个课程名称和课程代号的转换器:输入下表中的课程代号,输出课程的名称.用户可以循环进行输入,如果输入0就退出系统.(**使用****switch +whil ...
- jdbc 02: 连接mysql,并实现删除与更新
jdbc连接mysql,并实现删除与更新 package com.examples.jdbc.o2_删除与更新; import java.sql.*; //连接与插入 /* jdbc删除操作 */ p ...
- 渲染优化中那些奇奇怪怪的rules
禁⽌使⽤ iframe iframe 会阻塞主⻚⾯的 Onload 事件 搜索引擎的检索程序⽆法解读这种⻚⾯,不利于 SEO iframe 和主⻚⾯共享连接池,⽽浏览器对相同域的连接有限制,所以会影响 ...
- Linux系统下安装windows字体笔记
源文档地址:https://www.e-iceblue.cn/spiredocforjavaconversion/word-to-pdf-font-issue.html windows字体路径:C:\ ...
- 第十六天python3 文件IO(二)
BytesIO操作 io模块中的类 from io import BytesIO 内存中,开辟的一个二进制模式的buffer,可以像文件对象一样操作它: 当close方法被调用的时候,这个buffer ...
- redux和dva
实习的时候,公司使用的是react,react说实话生态学的还不是很完善,就暂时先不做跟react相关的博客,等以后学好了react全家桶之后,专门再总结一下react的内容 这两天看了公司的alit ...