并行文档转换ODT>PDF Libreoffi

2024-04-19 08:37:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将数百个ODT文件转换为PDF文件,一个接一个地转换需要很长时间。我有一个多核的CPU。是否可以使用bash或python编写一个脚本来并行执行这些操作? 有没有办法从命令行使用libreoffice并行化(不确定是否使用了正确的单词)批处理文档转换? 我一直在python/bash中调用以下命令:

libreoffice --headless --convert-to pdf *appsmergeme.odt

或者

subprocess.call(str('cd $HOME; libreoffice --headless --convert-to pdf *appsmergeme.odt'), shell=True);

谢谢你!

提姆


Tags: 文件to命令行脚本bashconvertlibreofficepdf
3条回答

您可以将libreoffice作为守护进程/服务运行。请检查下面的链接,也许它对您也有帮助:Daemonize the LibreOffice service

另一种可能性是使用unoconvunconv是一个命令行实用程序,它可以将OpenOffice可以导入的任何文件格式转换为OpenOffice可以导出的任何文件格式。”

这个线索或答案是旧的。 我测试了Libreoffice4.4,我可以确认我可以同时运行libreoffice。 看我的剧本。

&13;
&13;
for odt in test*odt ; do
echo $odt
soffice --headless --convert-to pdf $odt & 
ps -ef|grep ffice 
done

因为作者已经介绍了Python作为一个有效的答案:

import subprocess
import os, glob
from multiprocessing.dummy import Pool    # wrapper around the threading module

def worker(fname, dstdir=os.path.expanduser("~")):
    subprocess.call(["libreoffice", "--headless", "--convert-to", "pdf", fname],
                    cwd=dstdir)

pool = Pool()
pool.map(worker, glob.iglob(
        os.path.join(os.path.expanduser("~"), "*appsmergeme.odt")
    ))

通过multiprocessing.dummy使用线程池而不是进程池就足够了,因为真正并行的新进程无论如何都是由subprocess.call()生成的。

我们可以直接设置命令和当前工作目录cwd。不需要为每个文件加载一个shell文件。此外,os.path支持跨平台互操作性。

相关问题 更多 >