Linux上Excel导出为PDF:字体缺失与渲染差异的修复
时间:2026-06-21来源:互联网作者:编辑:零才点击:
次
Linux服务器上将Excel导出为PDF的功能经历了多轮迭代优化,主要问题是:LibreOffice在Linux服务器上渲染xlsx转PDF时,与本地Excel/WPS打印效果存在显著差异。
一、问题诊断
- 字体缺失:模板使用宋体(SimSun)+Times New Roman,服务器仅有Noto Sans CJK,字符宽度不同导致列宽和图片锚点偏移
- 行高被代码修改:模板原始25pt被改为34pt
- 字体大小被代码修改:模板原始11pt被改为13pt
- 图片锚点渲染差异:OneCellAnchor/TwoCellAnchor在LibreOffice和Excel中行为不一致
二、解决方案
- 服务器安装宋体和Times New Roman字体(从Windows上传simsun.ttc和times*.ttf到/usr/share/fonts/truetype/simsun/)
- 删除代码中对行高(34pt)和字体大小(13pt)的修改,恢复模板原始值(25pt/11pt)
- 塔基和图例图片统一使用TwoCellAnchor直接复用模板锚点,不做缩放
- xlsx传给LibreOffice时不做任何修改,与模板完全一致
三、三条导出路由最终状态
- 网页版PDF(/api/export/pdf):Playwright渲染HTML,TwoCellAnchor+4/3宽度扩展
- Office版PDF(/api/export/sheets-pdf-office):LibreOffice转换,TwoCellAnchor模板锚点
- Excel导出(/api/export/sheets-excel):直接生成xlsx,TwoCellAnchor模板锚点
四、技术教训
- 改代码前先备份原始内容
- 修改线上JS文件需精确确定函数边界(大括号匹配),不能靠行号猜测
- LibreOffice与Excel的渲染引擎差异是系统性的,字体替换会引发连锁反应
- OneCellAnchor的colOff不支持负值,图片比列宽时无法居中
- TwoCellAnchor在两个引擎中行为最一致,优先使用
顶一下
(0)
0%
踩一下
(0)
0%
