場景
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中配置的路徑不對應。