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/

libreoffice-download.pnglibreoffice-download.png

安装目录为:
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

执行过程如下图示:

libreoffice-command.pnglibreoffice-command.png

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

测试结果如下图示:

springboot-openoffice-pdf.pngspringboot-openoffice-pdf.png

添加新评论