LibreOffice转换XLSX到PDF时SinglePageSheets参数报错求助
问题场景
在Docker Alpine v3.19环境下,使用LibreOffice 7.6.7.2执行以下命令将XLSX文件转换为PDF:
soffice --convert-to 'pdf:calc_pdf_Export:{"SinglePageSheets":{"type":"boolean","value":"true"}}' a.xlsx
触发断言错误:
/usr/include/c++/13.2.1/bits/unique_ptr.h:453: typename std::add_lvalue_reference<_Tp>::type std::unique_ptr<_Tp, _Dp>::operator*() const [with _Tp = ScPrintState; _Dp = std::default_delete
; typename std::add_lvalue_reference<_Tp>::type = ScPrintState&]: Assertion 'get() != pointer()' failed.
Unspecified Application Error
未添加SinglePageSheets参数时转换正常,且已安装JRE。
解决办法
修正参数格式与添加无头模式
Docker环境下必须启用无头模式(--headless),同时调整JSON参数的转义格式适配shell解析,尝试以下命令:soffice --headless --convert-to 'pdf:calc_pdf_Export:{\"SinglePageSheets\":true}' a.xlsx或简化参数结构:
soffice --headless --convert-to pdf:calc_pdf_Export --outdir ./ '{"SinglePageSheets":true}' a.xlsx升级LibreOffice版本
当前使用的7.6.7.2版本存在SinglePageSheets参数相关的断言bug,该问题已在7.6.8及更高版本中修复。建议升级到最新稳定版后再执行转换操作。替代方案:手动设置打印缩放
若无法升级版本,可先打开XLSX文件,为每个工作表设置打印缩放为「将所有列调整为一页」,保存后再执行无参数的转换命令;也可通过宏脚本批量配置,但需在Docker环境中启用LibreOffice宏支持。补充Docker环境依赖
Alpine系统下的LibreOffice可能缺失打印相关依赖,安装以下包确保组件正常运行:apk add cups-libs libpaper
内容的提问来源于stack exchange,提问作者Zhuo Jianming

