如何在fabricJS中应用.otf字体?

Posted

技术标签:

【中文标题】如何在fabricJS中应用.otf字体?【英文标题】:How to apply .otf fonts in fabricJS? 【发布时间】:2019-10-30 22:54:16 【问题描述】:

我有 .otf 字体列表,大约 200 种字体。

我正在使用 opentype.js 加载这些字体,如下所示:

opentype.load('HelveticaNeueLTStd-BdCn.otf', (err, font) => 
    if (err) 
        console.error('Error loading font ', err);
        return
    
    canvas.getActiveObject().set('fontFamily', 'HelveticaNeueLTStd-BdCn');
    canvas.requestRenderAll();
);

但它没有应用我从 .otf 加载的任何字体系列,如果我用 .ttf 做同样的事情,那么它工作正常。

【问题讨论】:

我有点困惑:你用 opentype.js 做什么?看起来您所做的只是“使用画布中的字体”,您根本不需要 opentypejs:使用普通的@font-face 加载字体,然后使用您设置的字体系列名称画布的context.font = ... 的每种字体 @Mike'Pomax'Kamermans:感谢您的回复,我通过在 head 标签中注入动态字体来做到这一点,并且工作正常。 那么这个问题应该可以再删了:用常规方法,一切正常。 @Mike:与传统方法不同,它需要应用一些技巧才能使其发挥作用。 @mike:感谢 mike 的建议,我将在此处发布我的解决方案,以便其他人可以从中受益。 【参考方案1】:

可以使用以下代码:首先从服务器加载字体,然后将这些字体注入到 html 的 head 标签中作为 font-face:

  const a = '<style> @font-face \n' +
            '    font-family: ' + fontFileName + ';\n' +
            '    src: url(' + url + ') format("opentype");\n' +
            '</style>';
  $('head').append(a);

url 是:字体文件的blob。

【讨论】:

以上是关于如何在fabricJS中应用.otf字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 otf 或 ttf 文件中获取字体名称?

如何在 matplotlib 中使用(随机)*.otf 或 *.ttf 字体?

如何在 Flutter 中使用开放式字体(OTF)?

如何从 OTF、TTF 文件中查找字体版本

如何在 OpenType PostScript OTF 字体文件中用一个字形替换另一个字形?

如何将日文 OTF 字体转换为与 FOP 一起使用