OnlyOffice 打开来自 Windows/WPS 的 Office 文档时,出现排版错乱、文字空白、字体显示异常。

字体问题排查与解决记录

日期:2026-08-09

环境:Debian GNU/Linux 13 (trixie),OnlyOffice 9.4.0

一、问题现象

OnlyOffice 打开来自 Windows/WPS 的 Office 文档时,出现排版错乱、文字空白、字体显示异常。

二、根因分析

1. 缺少 Windows 商业字体

系统预装的是 Noto CJK 系列开源字体,不包含 Windows 常用商业字体。文档中指定的字体(宋体、微软雅黑、黑体、楷体、仿宋、华文行楷等)在系统中不存在时,OnlyOffice 会回退到替代字体,导致排版错乱。

2. OnlyOffice 不认 fontconfig 的字体名映射

通过修改 ~/.config/fontconfig/fonts.conf 把"宋体"映射到 Noto Serif CJK 等做法,对 LibreOffice 有效,但对 OnlyOffice 无效。OnlyOffice 只认真实存在的字体文件,不认名字替换。其字体列表中没有"宋体"等虚拟字体名,文档里用到时依旧被替换。

3. 部分下载的字体文件损坏

从 GitHub 下载的字体文件,如果下载不完整(代理中断),会导致字体文件内部表数据损坏、族名错乱(如 simfang.ttf 族名变成小写文件名 simfang 而不是 仿宋/FangSong)。OnlyOffice 匹配不到正确族名,渲染成空白。需用 fontTools 验证族名完整性:

python 复制代码
from fontTools.ttLib import TTFont
f = TTFont('simfang.ttf')
for r in f['name'].names:
    if r.nameID in (1, 16) and r.platformID == 3:
        print(r.nameID, r.toUnicode())

三、解决步骤

1. 安装 Windows 常用中文字体(真实字体文件)

从 GitHub 仓库 xoofee/chinese_fonts 下载,安装到系统字体目录:

bash 复制代码
sudo cp *.ttf *.ttc /usr/share/fonts/truetype/windows-cn/
sudo fc-cache -f

已安装字体:

字体 文件名 状态
宋体 SimSun simsun.ttc
微软雅黑 Microsoft YaHei(含粗体) msyh.ttc / msyhbd.ttc
黑体 SimHei simhei.ttf
楷体 KaiTi simkai.ttf
仿宋 FangSong simfang.ttf
华文行楷 STXingkai STXINGKA.ttf

注意:下载需使用代理 -x http://192.168.31.82:7890,且必须用 fontTools 验证文件完整性,损坏文件会导致空白。

2. 安装微软英文字体

ttf-mscorefonts-installer 的临时下载目录(/tmp/ttf-mscorefonts-installer.*/)中,用 cabextract 手动解压 *.exe 中的字体:

bash 复制代码
for f in *.exe; do
  cabextract -d /usr/share/fonts/truetype/msttcorefonts "$f"
done

已装:Arial、Courier New、Georgia、Impact、Tahoma、Comic Sans MS、Andale Mono。

3. 清除 OnlyOffice 字体缓存

OnlyOffice 缓存了字体列表(AllFonts.jsfont_selection.bin 等),不会每次启动都重新扫描系统字体。安装新字体后必须清除缓存并完全退出重启:

bash 复制代码
rm -rf ~/.local/share/onlyoffice/desktopeditors/data/fonts/AllFonts.js*
rm -rf ~/.local/share/onlyoffice/desktopeditors/data/fonts/font_selection.bin
rm -rf ~/.local/share/onlyoffice/desktopeditors/data/fonts/fonts_thumbnail*

4. 移除 fontconfig 名字映射

真实字体装好后,应删除之前为映射 Windows 字体名到 Noto 而写的 ~/.config/fontconfig/fonts.conf,否则它会继续把宋体/仿宋等强制替换成 Noto,导致 OnlyOffice 排版依旧不对。

四、经验总结

  1. OnlyOffice 只认真实字体文件,不做名字映射------要装真实字体,而不是配置替换。
  2. 下载字体必须校验文件完整性,损坏文件会静默产生空白/错乱。
  3. 安装新字体后必须清除 OnlyOffice 缓存并完全重启。
  4. 不要保留多余的 fontconfig 名字映射,会覆盖真实字体。
  5. 判断依据:fc-match "宋体" 应返回 simsun.ttc: "宋体" 而非 Noto 字体。
相关推荐
ShineWinsu1 小时前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll
绿蚁新亭2 小时前
Markdown Wiki 网页代码块复制至欧拉 Linux Shell 脚本隐形字符故障完整复盘
linux·运维·服务器
易点云徐源2 小时前
(已解决)adb devices 不显示设备,但 Windows 的 ADB Interface 正常:一次 WinUSB 与旧版 ADB 兼容性排查实战
windows·adb
奈斯先生Vector2 小时前
OpenScience 安装失败怎么办?Windows 环境、API 配置与本地服务排错指南
人工智能·windows·架构·开源·aigc·midjourney
mengge.cloud2 小时前
LVS 小白完整教程(Linux虚拟服务器负载均衡)
linux·运维·服务器·负载均衡·lvs
秦渝兴2 小时前
LVS-DR 高可用集群实战:NFS + Web + DNS + Keepalived 全套架构
linux·服务器·网络·lvs
AxureMost2 小时前
C盘清理工具 LightC
windows
搬砖的小码农_Sky2 小时前
LANDrop 在 Ubuntu 上的安装方法
linux·运维·计算机网络·ubuntu
raindayinrain2 小时前
深入理解Linux内核--内存架构,页框分配器,性能优化
linux·numa·水位·区域·页框分配