我正在尝试编写一个读取docx文件的程序,并检查某些文本是否有彩色。例如,想象一下,如果在这句话中加粗的所有单词实际上是以任意颜色写的。我希望我的程序能够识别出“在这句话中加粗的单词实际上是以任意颜色书写的”这些单词都是彩色的。
然后在识别着色后,我希望能够根据颜色编辑识别的文本。例如,如果上面的粗体文字是红色,我想添加“红色>”文本周围的标签,同时仍然保持未着色的句子的其余部分。
我最初使用ZipInputStream和ZipEntry来获取“word / document.xml”,我原本打算从那里拉出文本和颜色,但我觉得这样会在一段时间后变得太混乱。我也尝试过使用Apache poi,但我认为它不能识别颜色。不过,Docx4j看起来很有希望。让我开始的任何想法,建议或示例代码?
答案 0 :(得分:2)
字体颜色是一个运行属性:
<w:r>
<w:rPr>
<w:color w:val="FF0000"/>
</w:rPr>
<w:t>red</w:t>
</w:r>
docx4j提供了三种方法:
我建议使用TraversalUtil,因为XPath依赖于JAXB对它的支持,它并不总是健壮的(至少在Sun / Oracle参考实现中)。
有关使用此功能的示例,请参阅finders package。
但除此之外,您面临的挑战是可以通过样式(甚至作为文档默认值)指定颜色属性。如果你想考虑到这一点,你需要查看有效的运行属性(这是docx4j的PDF输出所做的)。