SpringBoot集成LibreOffice实现Office文档转换及预览
简介
LibreOffice是一款功能强大的办公软件,默认使用开放文档格式 (OpenDocument Format , ODF), 并支持 .docx, .xlsx, *.pptx 等其他格式。
它包含了 Writer, Calc, Impress, Draw, Base 以及 Math 等组件,可用于处理文本文档、电子表格、演示文稿、绘图以及公式编辑。
它可以运行于 Windows, GNU/Linux 以及 macOS 等操作系统上,并具有一致的用户体验。
本文主要讲解如何安装LibreOffice以及SpringBoot集成LibreOffice完成文档转换及预览。具体步骤除pom.xml依赖外其它与OpenOffice完全一样。
LibreOffice安装
下载地址:
https://zh-cn.libreoffice.org/download/libreoffice/
安装目录为:
D:\Program Files\LibreOffice\program
启动LibreOffice服务
进入安装目录:
cd D:\Program Files\LibreOffice\program
输入启动命令:
soffice --headless --accept="socket,host=127.0.0.1,port=8101;urp;" --nofirststartwizard
查看启动进程:
netstat -ano|findstr "8101"
关闭进程:
taskkill /f /im soffice.exe
执行过程如下图示:
SpringBoot集成LibreOffice实现文件预览
SpringBoot配置
(1)创建SpringBoot工程,添加Spring Web依赖。
(2)pom.xml添加依赖
<!--转换工具-->
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-spring-boot-starter</artifactId>
<version>4.4.4</version>
</dependency>
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-local</artifactId>
<version>4.4.4</version>
</dependency>
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>4.4.4</version>
</dependency>
<dependency>
<groupId>org.libreoffice</groupId>
<artifactId>ridl</artifactId>
<version>5.4.2</version>
</dependency>
(3)application.yml配置
jodconverter:
local:
enabled: true
office-home: 'D:\Program Files\LibreOffice'
max-tasks-per-process: 10
port-numbers: 8101
4)添加文档转换接口
核心代码:
// 注入类
@Autowired
private DocumentConverter converter;
// 文档转换
converter.convert(inputFile).to(ouputFile).execute();
完整接口如下所示:
@Controller
@RequestMapping("/converter")
public class ConverterController {
/**
* 注入DocumentConverter(jodconverter内置)
*/
@Autowired
private DocumentConverter converter;
/**
* 主要业务逻辑,处理文件请求
*
* @param response
*/
@RequestMapping("/pdf")
public void toPdfFile(HttpServletResponse response) {
File inputFile = new File("D:/test/file1.docx");
File ouputFile = new File("D:/test/file1.pdf");
ServletOutputStream outputStream = null;
InputStream in = null;
try {
//文件转化
converter.convert(inputFile).to(ouputFile).execute();
outputStream = response.getOutputStream();
in = new FileInputStream(ouputFile);
IOUtils.copy(in, outputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
SpringBoot工程启动及测试
测试接口:
http://localhost:8080/converter/pdf
测试结果如下图示: