1

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

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

我最初使用 ZipInputStream 和 ZipEntry 来获取“word/document.xml”,并且我计划从那里提取文本和颜色,但我觉得这会在一段时间后变得太混乱。我也尝试过使用 Apache poi,但我认为它不能识别颜色。不过,Docx4j 看起来很有希望。有什么想法、建议或示例代码可以帮助我入门吗?

4

1 回答 1

2

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

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

docx4j 提供了三种方法来做这件事:

  • 通过 XPath
  • 通过 TraversalUtil
  • 通过 XSLT

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

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

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

于 2013-10-08T23:04:36.230 回答