Skip to content

Fabric.js 在 Node.js 服务中后退字体的问题

🏷️ Fabric.js

fabric.js 中如果对包含中文和英文的文本设置只支持英文的字体时,中文的部分可能会变成:

  • 乱码
  • 随机的其它字体
  • 空白

我本机是乱码,在服务器上是随机的其它字体,之前别的开发则遇到过显示为空白。

fabric.js 的 issue[1] 中提供了一个解决方案,但是当时估计是由于 node-canvas 组件的问题没法正常起作用[2],现在我这边本机和服务器上测试都是 OK 的。

javascript
const textFabric = new fabric.IText(badText, {
    left: 0,
    top: 0,
    fill: 'red',
    angle: 0,
    fontSize: 160,
    fontFamily: 'Noto Serif TC, Custom TC, Noto Serif SC',
});

写法有些类似于 CSS 中的 font-family ,效果是前面的字体不支持该字符时,会使用后面的字体显示。

另外,在本机(Windows)上运行时报了如下的错误:

(process:22956): Pango-WARNING **: 17:12:52.796: couldn't load font "Sterling_Script default Not-Rotated 40px", falling back to "Sans Not-Rotated 40px", expect ugly output.

最后发现是 Windows 的问题,需要在本机安装这个字体,之后才可以正常显示。[3]


  1. [NODE]: font fallback #7789 ↩︎

  2. Canvas doesn't use loaded fonts as fallback font #1997 ↩︎

  3. "(process:15840): Pango-WARNING **: 20:41:16.548: couldn't load font "sans serif Not-Rotated 10px", falling back to "Sans Not-Rotated 10px", expect ugly output." #1643 ↩︎