目標:最近遇到一個實現文件預覽功能,利用了openoffice把文件轉成html格式返回給前端
openoffice安裝
地址:http://www.openoffice.org/download/index.html(下載偏慢,csdn有幣大佬可以去上面找找資源。很快,很貴)
windows:
1.下載了直接一直下一步安裝就好,推薦默認路徑,否則需要配置(后面會提到)
linux:
1.推薦壓縮包放到/opt目錄下
2.解壓:tar -zxvf Apache_OpenOffice_4.1.6_Linux_x86-64_install-rpm_zh-CN.tar.gz
3.移動到安裝目錄:cd zh-CN/RPMS
4.安裝:rpm -ivh openoffice4.1.3-redhat-menus-4.1.3-9783.noarch.rpm
5.移動到程序目錄:cd /opt/openoffice4/program
6.啟動服務:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
7.查看啟動狀態:ps -ef|grep soffice
至此,openoffice我們安裝完成。
SpringBoot開發
1.添加依賴
2.編寫代碼
系統會自動裝配DocumentConverter,我們可以直接使用。convert和to方法支持流也支持文件,兩個as方法是作為該流或文件作為什么類型轉成什么類型。
3.添加配置
前面3個配置項顯而易見也沒什么大問題,后兩個容易出現一些問題:
問題1:拋出異常IllegalStateException:officeHome not set and could not be auto-detected
第一種情況:office-home其實是可以不填的,系統會默認一些路徑。如果沒有安裝在系統指定路徑並且沒有配置office-home會拋出這個異常。
默認路徑存儲在jar包中org.jodconverter.office.LocalOfficeUtils文件下,可以自行查閱。如果沒有安裝在這下面像我一樣指定。
第二種情況:項目本地沒有問題,部署在docker中突然出現這個錯誤。熟悉docker的朋友應該知道程序獲取路徑獲取的其實是docker容器的路徑,
所以需要在運行docker容器的時候添加掛載目錄。例:docker run ... -v opt/openoffice4:/opt/openoffice4 ...
問題2:拋出異常IllegalArgumentException: URL seems to be an unsupported
第一種情況:查看當前文件格式是否被支持。支持類型存儲在org.jodconverter.document.DefaultDocumentFormatRegistry類中,自己去查看是
否支持自己的類型轉換。
第二種情況:其實還有一種情況也會拋出這個異常,就是程序在轉換文件類型時會生成中間臨時文件,如果找不到也會出現這個異常。我在配置
文件中配置的working-dir就是指定中間臨時文件的存儲路徑。默認不填是沒有問題,系統生成然后程序自己去找。而程序部署在docker中就會出現
系統生成在服務器目錄下,程序在docker容器目錄下找的尷尬問題。因為我們之前上一步啟動docker掛載了opt目錄,所以干脆在opt目錄下新建文
件夾配置上就ok了。如果不是docker掛載問題也可以考慮是不是其他類似情況。
至此,我們部署在docker的程序已經可以再linux實現文件類型轉換啦。有問題可以下方評論。