当前,我正在使用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
感谢您的帮助!
嗯,过了一段时间我终于有机会再来看一遍。但是这次是从完整的双重引导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"