识别docx中的文本颜色

时间:2013-10-08 21:53:08

标签: java text colors docx docx4j

我正在尝试编写一个读取docx文件的程序,并检查某些文本是否有彩色。例如,想象一下,如果在这句话中加粗的所有单词实际上是以任意颜色写的。我希望我的程序能够识别出“在这句话中加粗的单词实际上是以任意颜色书写的”这些单词都是彩色的。

然后在识别着色后,我希望能够根据颜色编辑识别的文​​本。例如,如果上面的粗体文字是红色,我想添加“红色>”文本周围的标签,同时仍然保持未着色的句子的其余部分。

我最初使用ZipInputStream和ZipEntry来获取“word / document.xml”,我原本打算从那里拉出文本和颜色,但我觉得这样会在一段时间后变得太混乱。我也尝试过使用Apache poi,但我认为它不能识别颜色。不过,Docx4j看起来很有希望。让我开始的任何想法,建议或示例代码?

1 个答案:

答案 0 :(得分:2)

字体颜色是一个运行属性:

  <w:r>
    <w:rPr>
      <w:color w:val="FF0000"/>
    </w:rPr>
    <w:t>red</w:t>
  </w:r>

docx4j提供了三种方法:

  • 通过XPath
  • via TraversalUtil
  • 通过XSLT

我建议使用TraversalUtil,因为XPath依赖于JAXB对它的支持,它并不总是健壮的(至少在Sun / Oracle参考实现中)。

有关使用此功能的示例,请参阅finders package

但除此之外,您面临的挑战是可以通过样式(甚至作为文档默认值)指定颜色属性。如果你想考虑到这一点,你需要查看有效的运行属性(这是docx4j的PDF输出所做的)。