CentOS下MSOffice转PDF
更新:在CentOS上安装OpenOffice的时候其实默认安装的是Libre Office,所以之后如果要用yum装相关的扩展,需要指定libreoffice。比如安装字体扩展xsltfilter要写成“libreoffice-xsltfilter”而不是”openoffice.org-xsltfilter”。我已经对下文相关地方做出了修改。
将Office文件转成其他格式并没有想象的那么方便,比较好的不需要使用商业软件的方法需要在服务器上安装OpenOffice或者LibreOffice,这里记录一下所需软件的安装过程:
一、安装环境
我使用CentOS6.6(64bit)服务器版(运行在Virtual Box虚拟机环境下)作为实验环境,正式使用时也是该版本。
二、安装OpenOffice
服务器通常情况下都是没有图形界面的。网上查资料的时候发现有些安装方法截然不同。我采用的是参考文章1的方法,具体步骤如下:
Step 1.从仓库安装OpenOffice的headless版本
sudo yum install openoffice.org-headless openoffice.org-writer openoffice.org-draw
其中后面两个包是必须的,否则会得到This url is not supported
这样的报错;
Step 2.创建一个shell脚本使其能够作为服务运行:
sudo vim /etc/init.d/openoffice.sh
需要写入的脚本代码如下:
#!/bin/bash
# openoffice.org headless server script
#
# chkconfig: 2345 80 30
# description: headless openoffice server script
# processname: openoffice
#
# Author: Vic Vijayakumar
# Modified by Federico Ch. Tomasczik
#
OOo_HOME=/usr/bin
SOFFICE_PATH=$OOo_HOME/soffice
PIDFILE=/var/run/openoffice-server.pid
set -e
case "$1" in
start)
if [ -f $PIDFILE ]; then
echo "OpenOffice headless server has already started."
sleep 5
exit
fi
echo "Starting OpenOffice headless server"
$SOFFICE_PATH --headless --nologo --nofirststartwizard --accept="socket,host=127.0.0.1,port=8100;urp" & > /dev/null 2>&1
touch $PIDFILE
;;
stop)
if [ -f $PIDFILE ]; then
echo "Stopping OpenOffice headless server."
killall -9 soffice && killall -9 soffice.bin
rm -f $PIDFILE
exit
fi
echo "Openoffice headless server is not running."
exit
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
保存并退出;
Step 3.使该脚本能被运行
sudo chmod 0755 /etc/init.d/openoffice.sh
Step 4.使该服务能在开机时自动运行
sudo chkconfig --add openoffice.sh
有关chkconfig的用法可以参考这篇文章。
在Ubuntu下命令为:sudo update-rc.d openoffice.sh defaults
Step 5.运行该脚本开启服务
sudo /etc/init.d/openoffice.sh start
Step 6.检查OpenOffice是否在运行
netstat -nap | grep office
可以获得类似如下信息则表明运行成功:
tcp 0 0 127.0.0.1:8100 0.0.0.0:* LISTEN 1092/soffice.bin
三、安装UNOCONV
unoconv是一个不错的文档转换工具。具体介绍可以参考其官网。安装步骤如下:
Step 1.安装pyuno
由于UNOCONV使用python,因此需要安装其依赖——OpenOffice中的pyuno:
sudo yum install openoffice.org-pyuno
另外再下几个包,例如支持中文的libreoffice-langpack-zh_CN.x86_64
以及libreoffice-xsltfilter.x86_64
。之后如果有相关依赖可以使用yum search libreoffice
进行搜索。
Step 2.下载安装UNOCONV
RedHat系列rpm包下载页面在此,我下载的是0.5版本:
wget http://pkgs.repoforge.org/unoconv/unoconv-0.5-1.el6.rf.noarch.rpm
sudo rpm -ivh rpm -ivh unoconv-0.5-1.el6.rf.noarch.rpm
若按照前面的步骤下来,应该不会有报错,执行unoconv —version
显示如下信息:
unoconv 0.5
Written by Dag Wieers <dag@wieers.com>
Homepage at http://dag.wieers.com/home-made/unoconv/
platform posix/linux2
python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)]
LibreOffice 4.0
build revision $Rev$
四、安装中文支持
到此,我们可以测试一下.doc转pdf是否成功:
unoconv -f pdf test.doc
如果测试的文档中包含中文,那么在生成的pdf中中文是不会被正确显示的,原因就在于没有安装MS中文支持。可以按照如下步骤安装支持,其中用到的软件都是开源或者有使用许可的。其中关于是否可以使用msttcorefonts可以参见这个回答。
Step 1.安装CentOS中的中文支持
注意在CentOS 6中安装和之前的方法不同,具体可以参考How to Install Asian Fonts on Red Hat & CentOS Linux Distributions。具体命令为:
yum groupinstall "Chinese Support"
Step 2.安装微软中文字体支持:cabextract和msttcorefonts
2.1 安装cabextract:
yum install cabextract
如果出现找不到这个软件的问题,可以用rpm安装一个epel-release
包:sudo rpm -Uvh http://mirrors.sohu.com/fedora-epel/5/i386/epel-release-5-6.noarch.rpm
。(注意这里是5.4版本,可以下载最新版本,如果今后在安装其他软件过程中epel包较旧,可以卸载旧版本安装最近版本。)然后再执行yum install cabextract
。
2.2 安装msttcorefonts:
wget http://corefonts.sourceforge.net/msttcorefonts-2.5-1.spec
该步骤下载了一个.spec文件,但该文件中的mirrors过老(修改时间为2012版时),有些需要的文档无法下载,可以通过修改其中的镜像的路径:定位到62行,将http://${m}.dl.sourceforge.net/project/corefonts/the%20fonts/final/
改为http://sourceforge.net/project/corefonts/the%20fonts/final/
。
其次执行:
rpmbuild -bb msttcorefonts-2.5-1.spec
在此过程中文件wd97vwr32.exe
不能从sourceforge镜像中下载到,可以在别的地方下载好后放入$HOME/rpmbuild/BUILD/msttcorefonts/downloads/
。
安装rpm包:
rpm -ivh $HOME/rpmbuild/RPMS/noarch/msttcorefonts-2.5-1.noarch.rpm
Step 3. 更新字体缓存
fc-cache -f -v
四、准备就绪
到目前为止所需的准备工作均已完成。我们已经可以在命令行环境中对MSOffice文档进行转换。