简介:这是一套专为Ubuntu系统下WPS办公软件准备的字体补齐方案,目标用户是经常处理含特殊符号文档的Linux使用者,用于解决打开文档时提示缺少Symbol、Wingdings、Wingdings 2、Wingdings 3等字体,导致符号以问号或空白显示的问题。压缩包共129个文件,核心是128个TTF标准字体文件,覆盖常用符号字体、中文宋体及多语言显示所需字体,另含一个install.sh一键安装脚本,整体包体58.08MB,解压后执行sudo ./install.sh即可自动安装到系统字体目录,免去手动添加字体的麻烦。目前已有1414人学习下载,安装后WPS将正确渲染符号、图形与特殊字符,显著提升文档排版完整性和视觉效果,适用于政企办公、学术论文、技术报告等对文档规范性要求较高的场景。整套方案目录结构简洁,脚本已处理权限与目标路径,无需额外配置,不同技术水平的用户均可快速完成部署。 我刚在Ubuntu上装好WPS Office那会儿,打开同事发来的docx文档,满屏中文标题直接变成了一排排空心方块,数字和英文倒是正常,但汉字全军覆没。这种“豆腐块”问题在Linux下跑WPS的用户里太常见了,说破天就是系统缺字体集,不是软件坏了。这篇文章就围绕Ubuntu下WPS缺失字体集这件事,从根源讲清楚为什么缺、最缺哪几个,再给出一套从命令行安装到验证排查的完整方案,照着做基本一次到位。适合刚切换到Linux办公、或者被字体问题折腾到想砸电脑的朋友。
1. 为什么Linux版WPS老缺字体:先搞清楚问题根源
1.1 缺字体的本质:字体渲染链和文档回退机制
很多人以为字体缺失就是“系统里少个文件”,装上就完了。但实际牵涉到Linux的字体查找机制。Linux系统里,应用程序找字体不是直接去翻目录,而是通过一个叫fontconfig的底层服务来查询。WPS启动后,会根据文档里记录的字名去fontconfig里找对应的字形文件,找到一个能匹配的就用,找不到就按匹配规则回退到替代字体。
Windows下办公文档常用的字体是宋体、黑体、仿宋、楷体、微软雅黑、等线,这些字体在Windows系统里是“出厂自带”的,所以文档作者完全不会意识到自己在依赖它们。而Ubuntu默认安装的字体以开源字体为主,像Ubuntu自带的Cantarell、DejaVu这些,压根没有中文字形,系统也不会预装微软系中文字体。所以当WPS打开一个指定了“宋体”的docx时,fontconfig找不到SimSun,就只能在已安装字体里挑一个相似的去顶替,如果连合适的CJK(中日韩统一表意文字)字体都没有,渲染时就只能输出空白方块。
这里有个容易混淆的点:有时候同一个乱码文档,在A机器上只是字体不对劲,在B机器上却直接方块。区别就在于A机器装了某个可用的中文字体,fontconfig回退到了它;B机器连中文字体都没装,渲染链彻底断裂。所以“看起来是WPS的问题”,本质上永远是系统字体库的问题。
1.2 哪些字体最容易成为“重灾区”
根据我接触过的企业和个人文档,下面这张表基本覆盖了90%的缺字场景:
| 字体名 | 常见场景 | 缺失后果 | Linux下常用替代方案 |
|---|---|---|---|
| 宋体(SimSun) | 正文、公文、通知 | 正文乱码或全部变成默认字体 | Noto Serif CJK SC、文泉驿正黑 |
| 黑体(SimHei) | 标题、强调段落 | 标题字体被替换,层级感消失 | Noto Sans CJK SC、文泉驿微米黑 |
| 仿宋_GB2312 | 政府公文、红头文件 | 整段排版错乱,甚至连字号都变形 | 朱雀仿宋、FZFangSong |
| 楷体(KaiTi) | 引文、签名、批注 | 引文和正文分不清 | AR PL UKai、Kaiti SC |
| 微软雅黑(Microsoft YaHei) | PPT、现代商务文档 | 文字间距异常、标题不整齐 | Noto Sans CJK SC |
| 等线(DengXian) | 新版Office默认正文 | 表格文字和正文全乱 | Noto Serif CJK SC |
注意表格里的替代方案并不是“完全等价”,只是说显示效果和排版结果可用。真要做严格排版,尤其涉及字号、字距、笔画粗细的项目,最好还是通过fontconfig把字体名映射到本地最接近的字形,而不是指望WPS自动选一个完美替代。这个映射方法后面第3章会给出具体配置。
2. 动手前先备好“字体弹药”:字体包选型与准备
2.1 必装的开源字体包清单
Ubuntu的软件源里其实已经打包了大量开源中文字体,装起来非常方便。我平时在干净系统上第一轮会装这五个包:
- fonts-noto-cjk:谷歌思源黑体和思源宋体的Linux发行版,包含Noto Sans CJK SC和Noto Serif CJK SC,是现在Linux中文显示的事实标准,必须装。
- fonts-wqy-microhei和fonts-wqy-zenhei:文泉驿微米黑和正黑,老牌开源中文字体,兼容性好,字体体积小。
- fonts-arphic-ukai和fonts-arphic-uming:文鼎楷体和明体,用于楷体、明体等特殊场景的补充。
- ttf-mscorefonts-installer:微软核心字体安装包,里面是Arial、Times New Roman等西文字体,能改善英文混排效果。
这里有个建议:如果不是有明确的公文排版需求,仿宋其实不用一开始就装。原因在于仿宋的开源替代品本来就少,而且部分“开源仿宋”字体的授权和字形质量参差不齐。真需要的时候,网上搜“朱雀仿宋”或者“FZFangSong”,下载单款ttf文件手动安装就行,比在apt源里大海捞针靠谱得多。
2.2 网络不好时的离线字体包方案
ttf-mscorefonts-installer这个包有点特殊,它本身只是一个安装脚本,真正的字体文件需要安装过程中从网上下载,而且默认源在国外。国内网络环境下经常卡在“Downloading corefonts”这一步,一直转圈,最后报404。如果遇到这种情况,先Ctrl+C中断安装,然后换下面的离线方式:
- 用浏览器直接下载字体cab包(比如Andale32.exe、arial32.exe、times32.exe这些微软官方安装程序)。
- 把这些文件放到/var/cache/mscorefonts/目录下。
- 再次执行sudo apt install ttf-mscorefonts-installer,安装脚本检测到本地缓存后就会优先使用,不再走网络下载。
我自己实际操作时,还遇到过一种情况:直接下载deb包到本地,然后用dpkg -i安装,结果它还是要联网拉字体。所以“先放缓存再装”这个方法更稳。注意这个目录需要root权限,提前用sudo mkdir创建好。
2.3 字体文件到底该放哪里
Linux下字体可以装在两个层级:系统级目录/usr/share/fonts和用户级目录~/.local/share/fonts(老版本还有~/.fonts)。系统级目录所有用户都能用,需要sudo权限;用户级目录只对当前用户生效,不需要sudo。WPS通过fontconfig扫描这两处,所以放哪里都能被识别。
我个人习惯是把手动下载的字体放~/.local/share/fonts,因为这样不影响系统全局,重装系统后也不会遗留一堆没用的字体文件。需要注意:放完字体后一定要执行sudo fc-cache -fv,否则fontconfig的缓存不会更新,WPS照样找不到新字体。
3. 补齐字体的实操步骤:从命令行到字体映射
3.1 方案A:apt一键安装(适合网络通畅的场景)
如果网络环境不错,直接开终端执行:
sudo apt update sudo apt install fonts-noto-cjk fonts-wqy-microhei fonts-wqy-zenhei fonts-arphic-ukai fonts-arphic-uming ttf-mscorefonts-installer安装完成后刷新字体缓存:
sudo fc-cache -fv这一套下来,系统里就有了思源黑体、思源宋体、文泉驿、楷体、明体和微软核心西文字体。对大多数日常Office文档来说,已经能正常显示了。注意最后一行-fv参数会输出刷新的字体文件路径和数量,如果你发现某个目录一个字体都没扫到,那基本就是目录权限或者路径写错了。
3.2 方案B:手动安装字体文件(适合手里有ttf/ttc的场景)
有时候你从同事那里拷来一个专用字体,比如公司定制的标题字体,就要手动安装。步骤很简单:
mkdir -p ~/.local/share/fonts cp 你的字体.ttf ~/.local/share/fonts/ fc-cache -fv这里有一个容易被忽略的细节:字体文件的后缀必须是.ttf、.otf或.ttc,如果是从Windows系统里拷出来的字体,有时候文件名是中文的,没关系,fontconfig不挑文件名,认的是字体内部的字体族名。但如果文件扩展名是.fon,那就直接放弃吧,这种老式位图字体Linux基本不认识。
3.3 方案C:Fontconfig字体替换(解决文档指定字体找不到的问题)
字体装好只是第一步,还有一个更隐蔽的问题:文档里指定的是“SimSun”,你系统里装的是“Noto Serif CJK SC”,fontconfig默认会帮你匹配,但匹配的优先级不一定符合预期。最靠谱的办法是写一个fontconfig规则,把Windows常用字体名映射到本地已有的字体。
创建或编辑/etc/fonts/local.conf:
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="pattern"> <test name="family"><string>SimSun</string></test> <edit name="family" mode="prepend" binding="strong"> <string>Noto Serif CJK SC</string> </edit> </match> <match target="pattern"> <test name="family"><string>SimHei</string></test> <edit name="family" mode="prepend" binding="strong"> <string>Noto Sans CJK SC</string> </edit> </match> <match target="pattern"> <test name="family"><string>Microsoft YaHei</string></test> <edit name="family" mode="prepend" binding="strong"> <string>Noto Sans CJK SC</string> </edit> </match> </fontconfig>编辑完后执行fc-cache -fv刷新,再用fc-match "SimSun"验证:
fc-match "SimSun"如果输出是Noto Serif CJK SC,说明映射已经生效。这个方法不光是WPS受益,系统里所有依赖fontconfig的软件都会按这套规则来替换字体,LibreOffice、GIMP这些都会更听话。
3.4 不要忽略WPS自己的字体替换入口
最后说一个很多人不知道的操作:WPS关闭状态下手动删一次WPS的字体缓存。WPS会把扫描到的系统字体列表缓存下来,你新装的字体未必会立刻出现在字体下拉框里。正常做法是彻底关闭WPS所有进程后重新打开,如果还不行,就删除用户配置目录下的字体缓存文件再启动。
pkill -f wps rm -rf ~/.config/Kingsoft/office6/fontcache删除前建议先备份整个Kingsoft目录,免得误删了登录状态和自定义设置。重启WPS后,它就会重新扫描系统字体库。
4. 装完别急着走:验证与常见问题排查实录
4.1 怎么确认字体真的装好了
第一层验证,在终端里用fc-list把字体列表拉出来,看目标字体在不在:
fc-list | grep -i "noto serif cjk" fc-list | grep -i "wqy"第二层验证,打开WPS新建一个文字文档,在字体下拉框里输入“Noto”,看能不能选到Noto Serif CJK SC。如果下拉框里能选到,说明WPS已经识别到字体;如果选不到,大概率是WPS缓存没刷新。
第三层验证,也是最关键的:打开之前乱码的那个docx文档,把正文全选,看字体名是否变成了可识别的中文字体;再执行一次“输出为PDF”,用PDF阅读器打开,检查文字是否正常嵌入、能否选中复制。PDF导出如果正常,基本可以确定字体链路完全打通了。
4.2 常见问题与解决方法速查表
下面这些是我在实际使用中遇到过的、以及周边同事反馈过的问题,直接做成表格,方便你对照排查:
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 字体装完,WPS还是方块 | WPS字体缓存未刷新 | 关闭WPS,删除~/.config/Kingsoft/office6/fontcache,重启WPS |
| 系统里fc-list能看到字体,但WPS下拉框没有 | WPS扫描列表用的还是旧缓存 | 用3.4节的办法强制重建WPS字体缓存 |
| 中文正常,但英文和数字发虚、模糊 | 缺少合适的西文字体 | 安装ttf-mscorefonts-installer,或安装fonts-crosextra-carlito |
| 某些符号(如希腊字母)显示乱码 | 缺少数学类字体 | 安装fonts-lmodern、fonts-mathjax |
| 公文里的仿宋字体完全不对 | 开源替代品字形差异大 | 手动下载朱雀仿宋,安装后用local.conf映射 |
| 安装了mscorefonts时一直卡在下载 | 网络无法访问国外字体源 | 按2.2节离线方案处理 |
4.3 一个经常被忽略的细节:默认模板字体
很多人在WPS里新建文档时,默认正文用的是“宋体”或“等线”,这两个字体在Linux下都需要依赖替代映射。与其每次手动改,不如直接把WPS的默认模板改掉。
打开WPS新建一个空白文档,设置好默认字体为Noto Serif CJK SC、默认字号为12磅,然后通过“文件-另存为模板”覆盖掉默认模板。这样每次新建文档都是已经设置好的状态,不需要再跟字体较劲。我帮同事配置的几台Linux办公机,几乎都是靠这个操作才真正告别字体问题。
5. 踩过几次坑之后的个人心得
字体这种问题,看着是小事,折腾起来是真的费神。先说一个我踩过的坑:为了追求“和Windows一模一样”,我曾经把Windows里的simsun.ttc、msyh.ttc、simhei.ttf全拷到Linux里用。结果WPS启动慢了两三秒,字体下拉框卡顿,甚至偶尔崩溃。后来想明白了,这些Windows字体文件体积大、字形复杂,Linux下的fontconfig处理起来负担不轻。现在我只保留必要的中文字体,商务文档用Noto Serif CJK SC,演示文档用Noto Sans CJK SC,再配上文泉驿做备用,系统既轻快又干净。
再分享一个实用的小技巧:遇到某一个文档还是不对劲时,别急着全网搜“为什么”,先在终端跑一条:
fc-match "文档里指定的字体名"比如文档用的是“等线”,你执行fc-match "DengXian",系统会直接告诉你它匹配到了哪个字体。看到结果就能判断是映射规则没生效,还是字体压根没装。拿着这个结果再改local.conf,比盲目重装字体高效得多。
最后想说的是,Ubuntu下用WPS,心态上要接受“字体不可能和Windows一模一样”这件事。开源字体在屏幕上的渲染效果其实往往更清晰,只是和Windows下的字形细节有差别,等你习惯了Noto的笔画风格,再回头看微软雅黑反而会觉得有点油腻。把字体集这个地基打好,WPS在Linux下是完全能撑起日常办公的,不管是写文档、做表格还是排PPT,都能稳定输出。
本文还有配套的精品资源,点击获取