Libreoffice命令行转换突然失败

问题描述 投票:1回答:1

当前,我正在使用LO将RTF文档转换为PDF。我正在从Windows使用WSL系统来运行ubuntu并运行LO命令:

"/mnt/c/Program Files/LibreOffice/Program/soffice.exe" --headless --convert-to pdf --outdir "/output/" *.rtf

这一切都很好,很轻松,然后运行了661个文档(不知道是否有人意识到在那数量的文档之后发生了什么事:]

convert C:\test\input\00001261_000871.rtf -> C:\output\00001261_000871.pdf using filter : writer_pdf_Export Error: Please verify input parameters... (SfxBaseModel::impl_store <file:///C:/output//00001261_000871.pdf> failed: 0xc10(Error Area:Io Class:Write Code:16))

第一次出现此错误后,所有文档都会失败,并显示相同的错误。当我手动转换上面的文档00001261_000872.rtf时,它可以正常工作(到达该文档时总是失败)

有人在这里发生什么吗?错误(0xc10)显示写有错误或什么错误?

以这种方式执行此操作的想法来自LO网站:https://wiki.documentfoundation.org/Faq/General/150

感谢您的帮助!

libreoffice windows-subsystem-for-linux
1个回答
0
投票

嗯,过了一段时间我终于有机会再来看一遍。但是这次是从完整的双重引导Ubuntu安装开始。

[我碰到一个话题,说Linux的cmd行有一个限制,即仅接受249个参数,然后它就停止了。

在创建了一个简单的负载均衡器以创建最多200个文件的目录之后,只需在每个文件夹上运行libre,一切都将正常工作,并且我可以根据需要转换任意数量的文档(您只需每200个文件旋转一个新的libre实例)。 >

如果这在wsl中有效?我不确定,当我需要转换一批文件,将文件复制到vm并将它们复制回本地共享并关闭vm时,我只能在蔚蓝中启动Ubuntu vm。为什么?还有一个泊坞窗并使用侦听器?原因只需复制文件,然后将其转换为本地文件,然后将其复制回就可以了……...>

我当前正在使用的bash脚本(bash conversion.sh <directory where the files are stored>),我需要转换RTF文档,并在*.rtf文件上进行过滤)

我指定-env变量来启动多个OL实例,以在转换文件时提供更高的速度。花了大约1分钟的时间将1000个RTF文件转换为PDF。

#!/bin/bash
shopt -s nullglob
baseDirectory="/home/user/test/conversion"

# Check if directory is specified.
if [ -z "$1" ]
  then
    echo "No input directory specified."
    exit
fi

# Balance files to directory, each directory contains max of 200
# This is done cause Linux has a shell limit of 249 with libreoffice.
rtfs=($1/*.rtf)
for ((i=0; i < ${#rtfs[@]}; i += 200)); do
    printf -v b "${baseDirectory}/balancer/%03d" $((++n))
    mkdir -p $b && mv -t $b "${rtfs[@]:$i:200}"
done

# Loop balance directies and let libreoffice do its magic in converting the RTF files to PDF.
# Remove the balance directory after the conversion is done.
for d in ${baseDirectory}/balancer/*; do
    id=${d: -3}
    soffice "-env:UserInstallation=file:///${baseDirectory}/environments/${id}" \
            --headless --convert-to pdf "$d"/*.rtf \
            --outdir $1 > ${baseDirectory}/environments/output_${id}.log 2>&1 && \
            rm -rf "$d" &
done

wait
echo "Conversion done"
© www.soinside.com 2019 - 2024. All rights reserved.