Как прочитать размер шрифта каждого слова в текстовом документе с помощью POI?

Я пытаюсь выяснить, существует ли в текстовом документе что-либо со шрифтом 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 ??


person Anthony    schedule 11.07.2013    source источник
comment
вы могли бы попытаться использовать эту логику Word-VBA (если возможно в java)...   -  person Kazimierz Jawor    schedule 11.07.2013


Ответы (1)


Да, это правильный путь; измерение в половине пунктов.

В docx у вас будет что-то вроде:

<w:rPr>

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

</w:rPr>

спецификация ECMA 376 для @sz определяет единицу измерения как ST_HpsMeasure (измерение в полбаллах)

То же самое и с двоичным форматом документа, который поддерживает HWPF. Если вы посмотрите на [MS-DOC], вы увидите, что он также определяет размер текста в полпункта.

person JasonPlutext    schedule 15.07.2013