已知:
onlyoffice 6.1.0 | master | 6.2.0 的 all_fontsgen 生成的字体不支持中文字体(其实是所有非 ASCII 字符的字体,比如 阿拉伯文、日文、韩文)。
github 上已经有相关的 issue (https://github.com/ONLYOFFICE/DocumentServer/issues/1099) 了但是我这里拉下来编译发现并不好使。。我自己根据那个 fix 又稍微调整了一下,不贴了,代码很烂,毕竟 C++ 不熟悉。。
最终通过查看 fonts_thumbnail.png 发现生效了。(图就不放了,别引起版权问题。。。)
之后便遇到了本贴的问题,我明明选择了 宋体,但是最终换成的是 “等线”。猜想肯定是使用了 fallback 字体,至于为啥没找到宋体就不从而知了,大型的 js 项目简直就是灾难啊。。
硬着头皮上,毕竟这东西是在 sdkjs 项目里面,最终需要编译打包,然后 web-apps 引用使用,所以整个加日志的过程也很痛苦,添加日志》编译(3+分钟)》操作看日志生成。(添加了 debugger 但是好像被打包的程序忽略了)。
最终在 sdkjs/common/libfont/map.js:728行的 this.CorrectParamsFromDictionary(oSelect); 这行前后加日志打印发现前后出现差别,调用前还是宋体,调用后就成了等线。
简单看了一下这个方法的逻辑,就是把 非 ASCII 字符进行一波处理,显然,宋体给处理成了 simsun 然后没找到字体。注释掉这一行之后功能就正常了。
真是,找问题一天半,改问题只需要两个字符: //