fabricjs nodejs toSVG wrongText positioning

时间:2017-09-28 12:00:23

标签: fabricjs

我尝试在节点服务器上使用 fabricjs 来创建svgs。 我的问题是画布的 toSVG()功能无法正确识别字体,它会根据错误的字体计算字符位置。

使用版本:

节点:6.10

"canvas": "1.6.5"
"fabric": "1.7.14"

AFAIK:较新的1.7。*'织物的版本,也不正确计算位置。

根据教程(fabric-intro-part-4),它适用于PNG。

canvas.contextContainer.addFont(font);
canvas.contextTop.addFont(font);

生成PNG或SVG:

canvas.toDataURL({
  format: 'png',
});
canvas.toSVG();

PNG输出正确定位(参见示例),但使用 toSVG()不能正确应用(自定义)字体。

在该示例中,您可以看到自定义字体未正确显示(正确的字体用于显示,因为字体安装在我当前的系统上,但不在创建SVG的节点服务器上!)

我的下一个选项是比较toDataURL(...)和IText toSVG()的源代码,但我不确定这是否会有任何帮助。

由于在AWS Lambda中执行生成SVG的功能,因此无法在Linux OS(AFAIK)中安装字体。

您是否有想法或是否有我错过的任何教程或错误报告? 是否有类似 contextTop contextContainer 的内容,我可以在其中添加自定义字体,以便在toSVG()函数中应用它们?

我很感谢任何建议。

实施例: Ilustration of the Issue

PS:在浏览器中toSvg()知道字体,因为浏览器会加载它们,因此定位是正确的!

还问: https://groups.google.com/forum/#!topic/fabricjs/mff7Pr4fkGY

错误报告: https://github.com/kangax/fabric.js/issues/4355

复制示例: https://github.com/willKo/BugTest

2 个答案:

答案 0 :(得分:0)

如果没有访问目标字体文件,任何软件都无法正确定位字体字形。每种字体都有不同的度量和定位规则,在非常复杂的opentype表中描述,这些表是字体文件本身的一部分。

答案 1 :(得分:0)

到目前为止包括工作的字体。 见

https://github.com/kangax/fabric.js/issues/4355

的例子

https://github.com/willKo/BugTest/tree/includeFontsInDOM

不幸的是,定位仍然不正确。 可以连接到node-canvas。