如何阅读docx中使用的所有字体大小

时间:2013-07-17 03:37:53

标签: java docx4j

我正在使用docx4j以及他们为零件清单构建的非常有用的网络应用程序:http://webapp.docx4java.org/OnlineDemo/PartsList.html

我有一个包含五个单词的示例文档。前四个是字体大小12,最后一个是字体大小8.

我想阅读文档中使用的所有不同字体大小。所以在这种情况下:12和8

我在webapp上传了示例文档,我认为这些信息会存储在document.xml中,但我不确定,因为我在xml中只看到16而不是24 。另外,我不确定如何提取这些信息。

问题

  • 如何在docx4j中提取单词内容的字体大小?

  • 如何提取整个word文档的每个单词的字体颜色和背景颜色?

1 个答案:

答案 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);