doc转换为pdf解决方案

环境

  • 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" &

我也不知道为什么就解决了。。。可能大概和公司的电脑部署了桌面环境有关


参考资料:

  • unoconv官方文档
  • linux下的PHP上传任意文档支持在线浏览
  • Doc转换为pdf的解决方案

你可能感兴趣的:(doc转换为pdf解决方案)