环境
- Ubuntu 12.04.5 LTS
- LibreOffice 3.5
解决方案
安装
- 安装libreoffice
sudo apt-get install libreoffice-common
- 安装unoconv 以及支持文件
apt-get install unoconv libreoffice-core libreoffice-writer libreoffice-calc openoffice.org-java-common
转换方式
- libreoffice自带方式
注意:在GUI下使用,如果已经开启了桌面环境的Libreoffice,命令行无法生效
libreoffice --headless --convert-to pdf *.doc
或者
soffice --headless --convert-to pdf *.doc
- unoconv 方式
unoconv -f pdf *.doc
问题及解决
问题:
转换后的中文文档内容中的中文都成了方框
解决:
- locale 修改(/etc/default/locale)
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:en_US:en"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
- locale修改后需重新登录生效
- 将win7下的字体放在 /usr/share/fonts/win 下
其他参考资料里,还需要使之生效的命令,我自己实现时,在字体放过去后,转换文件就正常显示了。
问题:
在公司的服务器上部署的时候,unoconv在 php中无法执行
在自己的VPS上部署时没有这问题
解决:
公司电脑上开启一个监听的守护进程来处理unoconv调用soffice中的库文件的请求:
/usr/bin/soffice --headless --nofirststartwizard --nologo --norestore --nodefault --invisible "--accept=socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" &
我也不知道为什么就解决了。。。可能大概和公司的电脑部署了桌面环境有关