0

我正在使用 docx4j 和他们为部件列表构建的非常有用的 webapp:http ://webapp.docx4java.org/OnlineDemo/PartsList.html

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

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

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

问题

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

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

4

1 回答 1

2

如果运行时未设置字体大小,并且正在使用样式,则需要检查样式层次结构。如果未在此处设置,它将恢复为默认值。

正如 ECMA 4ed 第 1 部分在 17.7.2(样式层次结构)中所说:

这个过程可以描述如下:

  • 首先,文档默认值应用于文档中的所有运行和段落。
  • 接下来,表格样式属性将应用于文档中的每个表格,遵循每个表格指定的条件格式包含和排除。
  • 接下来,将编号项目和段落属性应用于使用编号样式格式化的每个段落。
  • 接下来,将段落和运行属性应用于由段落样式定义的每个段落。
  • 接下来,将运行属性应用于应用了特定字符样式的每个运行。
  • 最后,我们应用直接格式化(段落或运行属性不是来自样式)。如果此直接格式包括编号,则应用该编号 + 关联的段落属性。

如果 rFonts 元素(第 17.3.2.26 节)的值引用了不可用的字体,则应用程序通过称为字体替换的过程确定合适的替代字体,该过程在第 17.8.2 节中定义。

docx4j 做这样的事情 - 例如见第 430 行和 ff 在https://github.com/plutext/docx4j/blob/master/src/main/java/org/docx4j/model/PropertyResolver.java

类似的原则适用于字体颜色。

除了说 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);
于 2013-07-17T11:41:05.620 回答