【问题标题】:LibreOffice convert .docx to .pdf in parallel not working wellLibreOffice 将 .docx 并行转换为 .pdf 效果不佳
【发布时间】:2021-06-17 12:49:54
【问题描述】:

我有很多 docx 文件要转换为 pdf。将它们一一转换需要很长时间。所以我写了一个python脚本来并行转换它们:

from subprocess import Popen
import time
import os

os.chdir(os.path.dirname(__file__))

output_dir = './outputs'
source_file_format = './docs/example_{}.docx'

po_list = [Popen(
    f"/Applications/LibreOffice.app/Contents/MacOS/soffice --invisible --convert-to pdf --outdir {output_dir} {source_file_format.format(i)}",
    shell=True)
    for i in range(0, 7, 1)]

while po_list:
    time.sleep(0.01)
    for i, p in enumerate(po_list):
        status = p.poll()
        if status is None:
            continue
        elif status == 0:
            print('Succeed: [{}] {} -> {}'.format(p.returncode, p.stderr, p.args))
            po_list.remove(p)
        else:
            print('Failed: {} : {}'.format(p.args, p.poll()))
            po_list.remove(p)

但是每次我运行这个脚本时,只有一部分 docx 文件转换成功。其余的转换过程甚至不会抛出任何错误信息。

【问题讨论】:

  • 要查看在哪里发生故障,将 LibreOffice 的调用替换为模拟转换的脚本(在输出目录中写入一些内容并使用一些时间),然后检查结果。如果所有文件都在那里,那似乎是 LibreOffice 的问题。如果文件丢失,这是您的脚本。 -- 如果是 LibreOffice,我会通过以下方式确保:打开多个 shell,在每个 shell 中准备一个命令行,然后尽快启动所有 shell。
  • 我也有同样的问题。我测试了一个简单的函数并且并行部分正在工作,当我尝试使用 LibreOffice 时,我遇到了问题from joblib import Parallel, delayed import os def convert_docdocx_to_pdf(file_to_convert : str, output_folder : str ): """Convert a doc or docx document to pdf using Libre Office""" result = subprocess.call(['lowriter', '--convert-to', 'pdf', '--outdir', output_folder, file_to_convert]) return result Parallel(n_jobs = 2, prefer = "threads", timeout = 60)(delayed(convert_docdocx_to_pdf)(file, os.path.dirname(file)) for file in files)

标签: python pdf docx libreoffice


【解决方案1】:

我们也被同样的问题困住了一段时间。

LibreOffice 的多个实例使用 UserInstallation 目录共享同一空间,因此并行转换在这里产生了问题(间歇性过程似乎混淆了)。

为每个 libre 实例使用不同的目录有助于解决此问题。您可以通过 UserInstallation 环境变量来实现这一点,该变量可以传递为:“-env:UserInstallation=file:///d:/tmp/p0/”

您可以通过在目录中附加循环变量或任何唯一标识符来自动执行此操作。

参考:https://ask.libreoffice.org/en/question/42975/how-can-i-run-multiple-instances-of-sofficebin-at-a-time/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2022-08-17
    • 2013-02-13
    相关资源
    最近更新 更多