使用java库解析VML路径属性值

使用java库解析VML路径属性值,java,ms-word,docx4j,vml,Java,Ms Word,Docx4j,Vml,docx文件使用docx4j,我能够解析来自docx4j的CTRect和CTOval对象的椭圆和矩形。但是当我到达自定义形状docx4j时,给我CTShape或CTShapetype中的对象。我已经阅读了链接 路径值有时具有以下值 m1,1 L1200200,1 xe m100,1 L1100200100 xe m、 l,21600r21600,xe 更多组合…,一些使用调整值,一些使用公式类似路径=”wr@22,0@21@3,,0@21@4@.." 我想解析这些值以获得路径中的点或坐标。我

docx文件使用docx4j,我能够解析来自docx4j的CTRect和CTOval对象的椭圆和矩形。但是当我到达自定义形状docx4j时,给我CTShape或CTShapetype中的对象。我已经阅读了链接

路径值有时具有以下值

  • m1,1 L1200200,1 xe
  • m100,1 L1100200100 xe
  • m、 l,21600r21600,xe
  • 更多组合…,一些使用调整值,一些使用公式类似路径=”wr@22,0@21@3,,0@21@4@.."
我想解析这些值以获得路径中的点或坐标。我在解析它们时遇到了问题,而且我是VML新手,还没有完全掌握。您是否有一些建议的源代码、库或现有的开源项目可以作为参考或使用,或者有助于检索路径坐标的任何资源

仅供参考:我曾尝试查找LibreOffice源代码,但我没有从代码中获得太多,而且我发现很难,因为它使用的是另一种编程语言

我想解析这些值以获得路径中的点或坐标

使用VML对象模型引用来解析字符串

下面是第一个项目符号示例的分解:

m1,1
:移动到(1,1)

l12002,1
:带点的多段线(1200)(200200)(200,1)

xe
:关闭然后结束

下面是公式的解释:

定义路径的命令的文本表示形式。X或y坐标值可以是对格式为“@#”的公式的引用,其中#是公式的序号,例如“@2”。此属性字符串由一组丰富的命令组成,包括以下命令:

路径命令 ae(安格尔埃利普塞托) 阿尔(安格尔普斯) ar(arc) at(arcto) c(曲线图) 戊(完) l(线路至) m(移动到) nf(无填料) ns(仰泳) qb(二次贝塞尔) qx(椭圆象限) qy(椭圆象限) r(rlineto) t(否决权) v(曲线图) wa(顺时针方向) wr(顺时针弧) x(关闭) XSLTSL库方法可用于使用XSLT1.0处理器进行解析

<xsl:template name="str:string-match">
  <xsl:param name="text"/>
  <xsl:param name="pattern"/>
</xsl:template>

<xsl:call-template name="str:string-match">
  <xsl:with-param name="text" select="$mytext"/>
  <xsl:with-param name="pattern" select="'m?,?'"/>
</xsl:call-template>
<xsl:if test="fn:matches($mytext, 'm.,.')"></xsl:if>

XPath2.0方法可用于使用XSLT2.0处理器进行解析

<xsl:template name="str:string-match">
  <xsl:param name="text"/>
  <xsl:param name="pattern"/>
</xsl:template>

<xsl:call-template name="str:string-match">
  <xsl:with-param name="text" select="$mytext"/>
  <xsl:with-param name="pattern" select="'m?,?'"/>
</xsl:call-template>
<xsl:if test="fn:matches($mytext, 'm.,.')"></xsl:if>

VML是一种XML方言,因此请使用任何Java XSLT处理器:

可以使用VML样式表,例如:

还有一个GWT项目产生VML:

还有一个很好的VML教程供参考:

参考资料


您可以看看这是一个非常好的资源,您知道任何java对应物吗?可以尝试转换它,但我没有太多时间来实现转换。