SpringBoot集成OpenOffice實現doc文檔轉html


場景

OpenOffice

OpenOffice.org(通稱OpenOffice;簡稱OOo或OO.o)是一套開放源代碼的辦公室軟件,可以在多種操作系統上運作。

默認的文件交換格式是已經成為ISO標准的開放文件格式(ODFOpenDocument Format),此外也支援Microsoft Office 97至2010的文件格式,

以及其余常見的文件檔案。

需求是將doc文檔轉換成html文件。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。

實現

1、OpenOffice下載

需要在服務器上安裝OpenOffice,然后在SpringBoot去調用OpenOffice的服務實現轉換。

這里本地是Windows系統,所以選擇對應的版本的安裝包下載。

https://www.openoffice.org/download/

 

 

2、OpenOffice安裝

下載完exe安裝包之后,雙擊一路安裝,記得選擇和記住安裝的位置,安裝成功之后出現如下圖標。

 

 

這里的安裝路徑為D:/OpenOffice

 

 

3、啟動OpenOffice的服務

來到上面OpenOffice的安裝路徑下,在此打開cmd

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 

 

 

執行如上命令,啟動所需服務。如果沒有報錯則正常啟動

 

4、新建SpringBoot項目

這里直接使用項目快速開發框架搭建起來項目

若依前后端分離版手把手教你本地搭建環境並運行項目:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662

上面在搭建起來前后端分離版的項目后。

在后端SpringBoot項目的pom文件中,引入如下依賴

        <!--jodconverter 核心包 -->
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-core</artifactId>
            <version>4.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-spring-boot-starter</artifactId>
            <version>4.2.2</version>
        </dependency>
        <!--jodconverter 本地支持包 -->
        <!-- https://mvnrepository.com/artifact/org.jodconverter/jodconverter-local -->
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-local</artifactId>
            <version>4.2.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <!-- jodconverter-core -->

 

 

5、配置文件中添加配置

找到application.yml中添加如下jodconverter的配置

#jodconverter配置
jodconverter:
  local:
      enabled: true
  #home:安裝地址
      office-home: D:\\OpenOffice
      max-tasks-per-process: 10
      port-numbers: 8100

要特別注意的是這里的home要跟你上面openoffice的安裝路徑所對應。

另外這里的端口不要亂改,就是上面啟動openOffice的服務時指定的端口。

6、新建Word文檔

新建一個word文檔,並新增一些內容,然后將其放在resource下新建的static目錄下

 

 

7、新建Controller

新建一個Controller,直接注入轉換器

@RestController
@RequestMapping("/openoffice")
public class OpenOfficeController extends BaseController
{
    // 第一步:轉換器直接注入
    @Autowired
    private DocumentConverter converter;

然后編寫轉換的方法

    @RequestMapping("/convertToHtml")
    public void convertToHtml() throws OfficeException, FileNotFoundException {
        //轉換后的新文件
        File newFile = new File("D://badao.html");
        //需要轉換的文件
        File sourceFile = new File(ResourceUtils.getFile("classpath:static").getAbsolutePath() + "\\badao.doc");
        converter.convert(sourceFile).to(newFile).execute();
    }

直接調用轉換器的converter方法即可,這里將轉換后的文件存放在D盤下。

完整Controller方法

package com.ruoyi.web.controller.system;

import com.ruoyi.common.core.controller.BaseController;
import org.jodconverter.DocumentConverter;
import org.jodconverter.office.OfficeException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.FileNotFoundException;

@RestController
@RequestMapping("/openoffice")
public class OpenOfficeController extends BaseController
{
    // 第一步:轉換器直接注入
    @Autowired
    private DocumentConverter converter;

    @RequestMapping("/convertToHtml")
    public void convertToHtml() throws OfficeException, FileNotFoundException {
        //轉換后的新文件
        File newFile = new File("D://badao.html");
        //需要轉換的文件
        File sourceFile = new File(ResourceUtils.getFile("classpath:static").getAbsolutePath() + "\\badao.doc");
        converter.convert(sourceFile).to(newFile).execute();
    }
   
}

然后就可以直接使用接口測試工具調用該接口進行測試轉換效果。

8、使用前端調用接口測試效果。

因為這里考慮后面業務流程的實現,所以用前端調用該接口進行測試。

前端新增頁面,頁面新增按鈕,按鈕設置點擊方法,調用Js中的方法

<template>
  <div class="component-upload-image">
    <el-button @click="convertToHtmlRequest">doc轉換成html</el-button>
  </div>
</template>

<script>
import {convertToHtml } from "@/api/system/openOffice";
export default {
  name: "openOffice",
  data() {
    return {
     
    };
  },
  methods: {
    convertToHtmlRequest() {
      convertToHtml().then((response) => {
        console.log(response);
      });
    }
  },
  watch: {},
};
</script>

<style scoped lang="scss">

</style>

調用的js代碼中發出請求並調用后台接口

import request from '@/utils/request'

export function convertToHtml() {
  return request({
    url: '/openoffice/convertToHtml',
    method: 'get',
  })
}

效果展示

9、問題

如果后台在啟動時提示:

invalid officeHome: it doesn't contain soffice.bin:D:...

 

 

那就是OpenOffice的安裝路徑和在application.yml中配置的路徑不對應。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM