D3JS:如何将SVG文本转换为path?

有没有一种D3.js的方式来将文本元素转换为path元素?

所以当我抓住生成的SVG,我可以保留我的文字形状。

JavaScript(d3或任何其他工具)无法访问有关系统或Web字体中单个字母形状的vectorpath信息。 这是SVG 2的一个要求,但没有明确的build议。

在由Lars Kotthoff链接的问题中描述的Raphael方法使用Cufon字体生成器实用程序使用已经转换为JavaScript的字体对象。 不幸的是,Cufon是为旧的IE VML语言devise的,而不是SVG,因此您需要添加额外的转换(或使用Raphael)来转换为SVGpath数据。

要使用SVG,使用一般的字体转换工具转换为SVG字体,然后提取字形数据并将其转换(转换为正确的大小并翻转y轴)可能同样简单。 或者,如果你正在一个服务器上工作,你可以使用像开罗这样的低级graphics库来进行文本到path的转换。 不幸的是,浏览器中的SVG字体支持非常差,您不能直接使用它来embedded字体数据。 (即使假设您有权分发字体,但由于其他原因未使用networking字体)。

更新:在评论中提到Inkscape提醒我Inkscape也有一个命令行界面来转换/导出SVG文件 。 您可以在服务器工作stream程中使用它; 文本到path是导出选项之一。 您必须找出一种方法来设置它,以便服务器上的Inkscape程序可以访问完整的字体,然后通过Inkscape将由d3例程创build的SVG与以下选项一起穿梭:

inkscape TEMP.FILENAME --export-plain-svg=FILENAME --export-text-to-path 

DOM中唯一的text-to-image选项是HTML canvas; 您可以在canvas上书写,然后抓取图像数据。 但是这将是一个PNG图像,而不是一个vector。

不过,我也希望您能够考虑是否真的需要特定字体的字母的确切形状,以及是否值得使用文本作为文本而失去function,可访问性和search引擎优化。

有一个名为text-to-svg的节点模块声称这么做:

将文本转换为SVGpath,无需本地依赖。

 const TextToSVG = require('text-to-svg'); const textToSVG = TextToSVG.loadSync(); const attributes = {fill: 'red', stroke: 'black'}; const options = {x: 0, y: 0, fontSize: 72, anchor: 'top', attributes: attributes}; const svg = textToSVG.getSVG('hello', options); console.log(svg);