庇护祝福的分享

Be worthy

Doc转换为pdf的解决方案

单纯的将Doc转换为pdf很简单,使用office软件直接在图形界面下转换即可,但是如果涉及到批量转换,最好还是使用命令行工具。

一、unoconv

简介

unoconv 利用 LibreOffice/OpenOffice 的 UNO 接口实现了命令行文档格式转换功能,支持所有 LibreOffice/OpenOfficee 支持的文件格式。 因此不管机器上安装的是LibreOffice还是OpenOffice,都可以使用unoconv进行格式转换,不过需要注意的是一台机器不能同时安装LibreOffice和OpenOffice。

使用

基础转换命令:

$ unoconv -f pdf xxx.doc 

批量转换: 可以默认采用2002端口开启监听器(或者通过-p/–port参数指定端口),例如:

unoconv --listener &
sleep 20
unoconv -f pdf *.odt
unoconv -f doc *.odt
unoconv -f html *.odt
kill -15 %-

指定转换页数,文件名等:

-e, --export=name=value  set export filter options
 eg. -e PageRange=1-2

实例:

$ unoconv -f pdf -e PageRange=1-2 test.docx

这样就实现了只转换前两页。

转换效果

我的机器安装的是LibreOffice,效果还不错,和LibreOffic中的显示基本保持一致。不过少数doc文档在LibreOffice中显示有问题,因此转换后也是有问题的。

二、Abiword

简介:

AbiWord是一个以GNU通用公共许可证授权的免费文字处理软件,名称”AbiWord”是派生自意谓开放的西班牙语单词”Abierto”;支持Linux、Mac OS X(PowerPC)、Microsoft Windows、ReactOS、BeOS与其他操作系统,但对每个操作系统的支持程度都有所不同。 用它编辑文件后保存为.abw后缀,打开后为xml格式的文档。

使用

基础转换命令:

    $ abiword --to=pdf xxx.doc

实际转换效果

实际转换效果并不好,测试下格式解析不佳,和原文差距较大,局部出现布局错乱的现象。

三、cups-pdf

简介

cups-pdf是一个虚拟打印机,输出效果和打印预览一致。这种方案保真性应该是最高的,但是相对来说不是很灵活,只能转成pdf。

使用

安装:

$ sudo apt-get install cups-pdf

转换命令:

$ oowriter -pt pdf your_word_file.doc
$ libreoffice -pt pdf your_word_file.doc

转换后的文件默认会保存在~/PDF文件夹中,不过中文文件的命名会有问题,会被命名为三位数字。

$ libreoffice --headless --print-to-file --printer-name pdf --outdir /home/xieyu xxx.doc

使用--print-to-file选项可以指定打印输出目录和打印机,不过这里输出的是ps后缀的文件,可以重命名成pdf.
我这里(3.5版本)测试--print-to-file命令偶尔会出现文字解析不出来的情况,和使用Libreoffice的--convert-to选项结果一样。而4.1版本没有这个问题。
使用模拟打印的方式无法指定pdf文件的命名,灵活性不够好。

四 LibreOffice自带的转换命令

$ libreoffice --headless --convert-to pdf *.doc
$ soffice --headless --convert-to pdf *.doc

注意:在GUI下使用,如果已经开启了桌面环境的Libreoffice,命令行无法生效。 我这里(3.5版本)测试偶尔会出现文字解析不出来的情况,而4.1版本没有这个问题。