已知:
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 然后沒找到字體。注釋掉這一行之后功能就正常了。
真是,找問題一天半,改問題只需要兩個字符: //