Word 合同转 PDF 后,三页的表格被拆成五页,列宽挤成一团,标题字体从思源黑体换成宋体。同一份文件在 Windows 上另存 PDF 完全正常。乍看像缓存或者权限的锅,追下去往往不是。
soffice --headless --convert-to pdf:writer_pdf_Export --outdir /out contract.docx pdftotext -layout /out/contract.pdf - | head -40 pdfinfo /out/contract.pdf | grep Pages
追下去是这么回事:Linux 容器里没有文档使用的字体,LibreOffice 拿度量不同的替代字体排版,换行位置全变。表格行高按替代字体重算,跨页断点跟着移。转换过程只警告不报错,很容易漏过去。
「LibreOffice 转 PDF 排版」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
具体做法是,把文档用到的字体装进容器 并让 fontconfig 能匹配到;转换命令加明确的 pdf 导出 filter 参数;固定页面尺寸和边距 不要依赖文档自带设置;转完用 pdftotext 检查页数和关键段落位置。
验收就看一点,转换后的 PDF 页数和原文档一致,表格列宽正常,pdffonts 里嵌入的是思源黑体而不是替代字体。
