更新:在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.安装微软中文字体支持:cabextractmsttcorefonts

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文档进行转换。