Linux下的word文档格式转换工具
最近接到一个需求,要将所有不同格式的文档(包括.doc/.docx/.wps)转成统一格式,如都转为.docx,或直接转为.html 或.txt。经调研后,发现有这样几款工具:
win32com
python-docx
pydocx
…
可能还有,我就不再赘述了。经过全面调研,我发现这些工具存在这样的问题——Python相关工具要么无法处理.doc(只能处理.docx),要么要求必须在windows环境下使用(如win32com)。当前大家的生产环境一般都是Linux环境,更换win服务器会造成一系列的连带问题,比如其他库是否兼容等等,非常麻烦,所以找到.doc/.wps在Linux下的处理方式非常重要。还好,最后被我找到了,那就是LibreOffice
LibreOffice具体用法
首先,直接在命令行执行libreoffice --version,看看你是否已经安装此款工具。如果还没有安装,参考下文安装LibreOffice
安装完毕后,使用以下命令,对待转格式的文档进行格式转换,示例如下:
将.doc格式文档转为txt格式:
libreoffice --headless --convert-to txt path-to-your-doc.doc
你同样可以指定转换后的文件输出路径,也可以批量地将doc/docx/wps文件传给LibreOffice接口:
libreoffice --headless --convert-to html --outdir /your/output/dir /your/doc_docx_wps/files/*.{dosx,doc,wps}
使用python脚本执行格式转换
这个其实没什么玄乎的,就是用Python执行命令行而已:
import os
os.system("libreoffice --headless --convert-to txt path-to-your-doc.doc")
当然,如果你嫌这个接口的单进程速度太慢,你也可以用Python执行多进程启动转换:
import subprocess
import os, glob
from multiprocessing.dummy import Pool
def worker(fname, dstdir=os.path.expanduser("~")):
subprocess.call(["libreoffice", "--headless", "--convert-to", "pdf", fname], cwd=dstdir)
pool = Pool()
pool.map(