如何使用POI读取word文档中每个单词的字体大小?

时间:2013-07-11 03:10:29

标签: java ms-word apache-poi word-processor

我试图找出word文档中是否存在字体为2的内容。但是,我无法做到这一点。首先,我试图读取样本word文档中每个单词的字体,该单词只有一行和7个单词。我没有得到正确的结果。

这是我的代码:

HWPFDocument doc = new HWPFDocument (fileStream);
WordExtractor we = new WordExtractor(doc);
Range range = doc.getRange()
String[] paragraphs = we.getParagraphText();
for (int i = 0; i < paragraphs.length; i++) {
  Paragraph pr = range.getParagraph(i);
  int k = 0
  while (true) {
     CharacterRun run = pr.getCharacterRun(k++);
     System.out.println("Color: " + run.getColor());
     System.out.println("Font: " + run.getFontName());
     System.out.println("Font Size: " + run.getFontSize());
     if (run.getEndOffSet() == pr.getEndOffSet())
       break;
  }
}

但是,上面的代码总是使字体大小加倍。即,如果文档中的实际字体大小为12,则输出24,如果实际字体为8,则输出16。

这是从word文档中读取字体大小的正确方法吗?

1 个答案:

答案 0 :(得分:2)

是的,这是正确的方法;测量值是半分。

在docx中,你有类似的东西:

<w:rPr>

  <w:sz w:val="28" /> 

</w:rPr>

ECMA 376 spec on @sz将单位定义为ST_HpsMeasure (Measurement in Half-Points)

与HWPF支持的二进制doc格式相同。如果您查看[MS-DOC],您会看到它还以半分指定文本大小。