我正在使用docx4j以及他们为零件清单构建的非常有用的网络应用程序:http://webapp.docx4java.org/OnlineDemo/PartsList.html
我有一个包含五个单词的示例文档。前四个是字体大小12,最后一个是字体大小8.
我想阅读文档中使用的所有不同字体大小。所以在这种情况下:12和8
我在webapp上传了示例文档,我认为这些信息会存储在document.xml
中,但我不确定,因为我在xml中只看到16
而不是24
。另外,我不确定如何提取这些信息。
问题
如何在docx4j中提取单词内容的字体大小?
如何提取整个word文档的每个单词的字体颜色和背景颜色?
答案 0 :(得分:2)
如果未在运行中设置字体大小,并且正在使用样式,则需要检查样式层次结构。如果未设置,则返回默认值。
由于ECMA 4ed第1部分将其置于17.7.2(样式层次结构):
此过程可描述如下:
- 首先,文档默认值应用于文档中的所有运行和段落。
- 接下来,表格样式属性应用于文档中的每个表,遵循条件格式包含和 每个表格指定的排除。
- 接下来,编号项和段落属性将应用于使用编号样式格式化的每个段落。
- 接下来,段落和运行属性将应用于段落样式定义的每个段落。
- 接下来,运行属性将应用于应用了特定字符样式的每次运行。
- 最后,我们应用直接格式化(段落或运行属性不是来自样式)。如果这种直接格式化包括编号,那 编号+应用相关的段落属性。
如果rFonts元素(第17.3.2.26节)的值引用了字体 虽然不可用,但应用程序确定了合适的替代方案 字体通过称为字体替换的过程,在其中定义 §17.8.2。
docx4j做了这样的事情 - 例如参见https://github.com/plutext/docx4j/blob/master/src/main/java/org/docx4j/model/PropertyResolver.java中的第430行和ff
类似的原则适用于字体颜色。
我不会在这里解决如何逐字逐句遍历文档(或者更确切地说,运行run),而不是说google traversalutil
在运行中明确设置字体大小的示例
<w:r>
<w:rPr>
<w:sz w:val="36"/>
</w:rPr>
<w:t>this is 18 points</w:t>
</w:r>
您可以在Microsoft Word中或使用docx4j进行设置。要了解如何在docx4j中执行此操作,您可以使用webapp从示例docx生成代码,但实质是:
org.docx4j.wml.R yourRun;
yourRun.getRPr().setSz(an HpsMeasure);