我尝试在节点服务器上使用 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()
函数中应用它们?
我很感谢任何建议。
PS:在浏览器中toSvg()
知道字体,因为浏览器会加载它们,因此定位是正确的!
还问: https://groups.google.com/forum/#!topic/fabricjs/mff7Pr4fkGY
答案 0 :(得分:0)
如果没有访问目标字体文件,任何软件都无法正确定位字体字形。每种字体都有不同的度量和定位规则,在非常复杂的opentype表中描述,这些表是字体文件本身的一部分。
答案 1 :(得分:0)
到目前为止包括工作的字体。 见
https://github.com/kangax/fabric.js/issues/4355
或
的例子https://github.com/willKo/BugTest/tree/includeFontsInDOM
不幸的是,定位仍然不正确。 可以连接到node-canvas。