【问题标题】:Parse VML Path attribute value using java libraries使用 java 库解析 VML Path 属性值
【发布时间】:2014-07-27 05:56:44
【问题描述】:

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

路径值有时有以下值

  • m1,1 l1,200,200,200,200,1 xe
  • m100,1 l1,100,100,200,200,100 xe
  • m,l,21600r21600,xe
  • 更多组合...,有些使用调整值,有些使用公式,例如path="wr@22,0@21@3,,0@ 21@4@..”

我想解析这些值以获取路径中的点或坐标。我在解析它们时遇到了问题,而且我是 VML 新手,而且我还没有掌握这一切。您是否有一些建议的源代码、库或现有的开源项目可供我用作参考或使用,或者任何有助于检索路径坐标的资源?

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

【问题讨论】:

标签: java ms-word docx4j vml


【解决方案1】:

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

使用 VML 对象模型参考来解析字符串。

这是第一个项目符号示例的细分:

m1,1: moveTo(1,1)

l1,200,200,200,200,1: 折线与点 (1,200)(200,200)(200,1)

xe: 关闭然后结束

下面是对公式的解释:

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

路径命令 ae(角椭圆形) al(角度椭圆) ar(弧) 在 (arcto) c(曲线) e(结束) l (lineto) 米(移动) nf(无填充) ns(无中风) qb(二次贝塞尔曲线) qx(椭圆象限) qy(椭圆象限) r (rlineto) t (rmoveto) v(曲线) wa(顺时针方向) WR(顺时针) x(关闭)

XSLTSL 库方法string-match 可用于使用 XSLT 1.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>

XPath 2.0 方法fn:matches 可用于使用 XSLT 2.0 处理器进行解析。

<xsl:if test="fn:matches($mytext, 'm.,.')"></xsl:if>

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

Using Xalan alongside Saxon

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

还有一个生成 VML 的 GWT 项目:

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

参考文献

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 2015-09-04
    • 2011-05-14
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    相关资源
    最近更新 更多