一、背景故事
這兩天遇到一個大坑,客戶要做office 文檔在線預覽功能,於是乎就要把office文檔轉換成pdf交給前端顯示。
在某度找了一圈都說openOffice+jodconverter 可以搞定這個事情。代碼倒是很好找,不過版本很多,各類jar包也很多,但嘗試下來發現,轉化效果很一般,複雜的excel也無法成功。有同事建議放到服務器上效果可能好些,於是就開始折騰在服務器上安裝OpenOffice這個事情。網上各種找大神的博文,發現安裝起來不是很順暢,就寫了這篇隨筆,記錄一下,遇到的問題,方便自己以後查看。
二、操作步驟
1.http://www.openoffice.org/zh-cn/download/ 去官網鏈接下載linux版本的openOffice 以4.1.5 版本爲例。
2.將壓縮包上傳至服務器上,並進行解壓安裝。
1 tar -zxvf 對應的壓縮包名字
2 cd 進入解壓後的 /zh-cn/RPMS
3 yum localinstall *.rpm
4 cd desktop-integration
5 rpm -ivh openoffice4.1.5-redhat-menus-4.1.5-9789.noarch.rpm
默認會安裝在/opt目錄下。
3.啓動服務
1 /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 臨時啓動
2 nohup /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard & 後臺啓動
端口號根據自己項目實際來確定。
後臺啓動會一直佔用內存,據各路大神說 大概100M,我自己沒測過具體值不清楚。
有的程序是需要預先啓動openOffice 服務的,有的則在代碼裏自己啓動服務。
4.查看進程
netstat -lnp |grep 端口號
大概顯示成這樣就算啓動完了。
tcp 0 0 127.0.0.1:8100 0.0.0.0:* LISTEN 14362
/soffice.bin
三、啓動報錯問題
1.裝完臨時啓動看下,可能會報錯:
error while loading shared libraries: libXext.so.6: cannot open shared object file: No such file or directory
執行命令:yum -y install libXext
2.裝完openoffice後啓動服務可能會報錯:
no suitable windowing system found, exiting
從字面上的意思就是缺少一個窗口化的系統
執行命令:yum groupinstall
"X Window System"
四、執行文件轉換後的pdf出現中文未能正常顯示問題
1. /usr/java/jdk1.8.0_91/jre/lib/fonts下新建路徑:fallback
$ cd $JAVA_HOME/jre/lib/fonts/
$ mkdir fallback
2. 上傳字體到fallback文件夾
將字體:simhei.ttf 黑體、simsun.ttc 宋體(windows下找下)
上傳至$JAVA_HOME/jre/lib/fonts/fallback路徑下。
- 查看系統字體文件路徑
$ cat /etc/fonts/fonts.conf
<!-- Font directory list -->
<dir>/usr/share/fonts</dir>
<dir>/usr/share/X11/fonts/Type1</dir> <dir>/usr/share/X11/fonts/TTF</dir> <dir>/usr/local/share/fonts</dir>
<dir>~/.fonts</dir>
4. 拷貝字體
將 /usr/java/jdk1.8.0_91/jre/lib/fonts的全部內容
拷貝到上一步查看的路徑下, 如上一步我的字體路徑爲:/usr/share/fonts
5. 更新緩存
執行 fc-cache
6. 殺掉openoffice進程
$ ps -ef | grep openoffice
root 14385 14366 0 15:27 pts/0 00:00:00 /opt/openoffice4/program/soffice.bin -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard
root 22031 2327 0 16:34 pts/0 00:00:00 grep openoffice
$ kill -9 14385
7. 重啓後臺運行openoffice
$ soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &