SpringBoot集成OpenOffice实现Office文档转换及预览

简介

Apache OpenOffice是一款先进的开源办公软件套件,它包含文本文档、电子表格、演示文稿、绘图、数据库等。 它能够支持许多语言并且在所有普通计算机上工作。它将你所有的数据以国际开放标准格式存储下来,并能够读写从其它常用办公软件包来的文件。它可以被完全免费下载并使用于任何用途。

本文主要讲解如何安装OpenOffice以及SpringBoot集成OpenOffice完成文档转换及预览。
详细步骤总结为以下四步:
(1)OpenOffice服务安装及启动;
(2)pom.xml添加jodconverter相关依赖;
(3)注入DocumentConverter类并实现转换接口;
(4)文档转换及预览接口测试;

OpenOffice安装

OpenOffice官网:
http://www.openoffice.org/

OpenOffice下载

下载地址:
http://www.openoffice.org/download/index.html

下载指定操作系统的安装包,如下图示:

openoffice-download.pngopenoffice-download.png

OpenOffice安装

下载完安装包后,双击下一步安装,安装成功后,可以在桌面上看到OpenOffice 4.1.13的菜单。

OpenOffice默认安装路径为:
C:\Program Files (x86)\OpenOffice 4

启动OpenOffice服务

进入安装目录:
cd C:\Program Files (x86)\OpenOffice 4\program

输入启动命令:
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

查看启动进程:
netstat -ano|findstr "8100"

关闭进程:
taskkill /f /im soffice.exe

执行过程如下图示:

openoffice-start.pngopenoffice-start.png

至此,可以看到OpenOffice服务已启动成功。

SpringBoot集成OpenOffice

SpringBoot工程创建及配置

(1)创建SpringBoot工程,添加Spring Web依赖。

(2)pom.xml添加依赖

<!--jodconverter 核心包 -->
<dependency>
    <groupId>org.jodconverter</groupId>
    <artifactId>jodconverter-core</artifactId>
    <version>4.2.2</version>
</dependency>
<!--springboot支持包,里面包括了自动配置类 -->
<dependency>
    <groupId>org.jodconverter</groupId>
    <artifactId>jodconverter-spring-boot-starter</artifactId>
    <version>4.2.2</version>
</dependency>
<!--jodconverter 本地支持包 -->
<dependency>
    <groupId>org.jodconverter</groupId>
    <artifactId>jodconverter-local</artifactId>
    <version>4.2.2</version>
</dependency>
<!-- commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

(3)application.yml添加配置jodconverter配置

jodconverter:
  local:
    enabled: true
    office-home: 'C:/Program Files (x86)/OpenOffice 4'
    max-tasks-per-process: 10
    port-numbers: 8100

以上配置文件是基于本地的libreoffice服务进行配置,更多配置可以查看自动装配类JodConverterLocalProperties。

(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工程启动及测试

服务启动日志如下图示:

springboot-openoffice-console.pngspringboot-openoffice-console.png

测试接口:
http://localhost:8080/converter/pdf

测试结果如下图示:

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

(完)

添加新评论