当前位置: 首 页 > 编程开发 > 网站技术

Linux上Excel导出为PDF:字体缺失与渲染差异的修复

时间:2026-06-21来源:互联网作者:编辑:零才点击:

Linux服务器上将Excel导出为PDF的功能经历了多轮迭代优化,主要问题是:LibreOffice在Linux服务器上渲染xlsx转PDF时,与本地Excel/WPS打印效果存在显著差异。

一、问题诊断

  1. 字体缺失:模板使用宋体(SimSun)+Times New Roman,服务器仅有Noto Sans CJK,字符宽度不同导致列宽和图片锚点偏移
  2. 行高被代码修改:模板原始25pt被改为34pt
  3. 字体大小被代码修改:模板原始11pt被改为13pt
  4. 图片锚点渲染差异:OneCellAnchor/TwoCellAnchor在LibreOffice和Excel中行为不一致

二、解决方案

  1. 服务器安装宋体和Times New Roman字体(从Windows上传simsun.ttc和times*.ttf到/usr/share/fonts/truetype/simsun/)
  2. 删除代码中对行高(34pt)和字体大小(13pt)的修改,恢复模板原始值(25pt/11pt)
  3. 塔基和图例图片统一使用TwoCellAnchor直接复用模板锚点,不做缩放
  4. 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在两个引擎中行为最一致,优先使用

本文标签:UbuntuLibreOffice字体缺失

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片