如何在SVG文档中获取完全在矩形区域内的所有文本?

时间:2015-07-22 17:57:01

标签: javascript svg

我有一个复杂的SVG文档,通过PDF.js从PDF研究论文生成,我想在矩形区域内找到所有文本。这支持基于Web的标签工具,用户可以在渲染的SVG文件的任意区域上绘制矩形(基本上将其视为图像)并需要查看相应的文本。我想到的第一种方法是迭代每个SVG的svg:textsvg:tspan元素并检查它是否与相关矩形相交,可能使用checkEnclosure()unsupported by FF,顺便说一句)。

但是,对于矩形注释作为svg:textsvg:tspan子集的字符的情况,这不起作用。例如,假设我们想在此行中注释单个关键字:

  

关键词:赫斯勒合金;压力效应;居里温度

在这种情况下,SVG将其分解为两个(因为'关键字'是斜体):

  

'关键字:'

  

'赫斯勒合金;压力效应;居里温度'

如果只用“压力效应”这个词来画一个矩形,那么程序基本上需要扫描每个字符中的每一个字符并查找它与rect的交集(更具体地说,它完全被它包含)。这样它基本上将每个char视为矩形字形。

如果你愿意分享一些指针,无论是基于这种初步方法,还是基于你所知道的其他事情,这都会有所帮助。

更新2015-07-23:

以下是我能找到的W3 SVG DOM方法:

InterfaceSVGSVGElement - 接口,对应'svg'元素

  • boolean checkEnclosure(在SVGRlement元素中,在SVGRect rect中)
  • boolean checkIntersection(在SVGRlement元素中,在SVGRect rect中)
  • NodeList getEnclosureList(在SVGRect中,在SVGElement中 referenceElement)
  • NodeList getIntersectionList(在SVGRect rect中,在SVGElement referenceElement中)

InterfaceSVGTextContentElement - 由各种与文本相关的接口继承,例如SVGTextElement,SVGTSpanElement,SVGTRefElement,SVGAltGlyphElement和SVGTextPathElement。

  • SVGRect getExtentOfChar(在unsigned long charnum中);

InterfaceSVGLocatable - 适用于所有具有'transform'属性或没有'transform'属性但其内容可以在当前用户空间中具有边界框的元素 < / p>

  • SVGRect getBBox()

0 个答案:

没有答案