Как кратко извлечь текст из прогона docx4j? - PullRequest
0 голосов
/ 13 июня 2019

Я хочу извлечь текст из прогонов в document.xml, используя docx4j из файла DOCX, например:

<w:document mc:Ignorable="w14 w15 w16se wp14">
<w:body>
<w:r>
  <w:rPr>
    <w:rFonts w:ascii="TimesNewRomanRegular" w:hAnsi="TimesNewRomanRegular" w:cs="TimesNewRomanRegular"/>
    <w:b/>
    <w:sz w:val="19"/>
    <w:szCs w:val="19"/>
    <w:lang w:val="en-US"/>
  </w:rPr>
  <w:t>CEO</w:t>
</w:r>
...

Я извлек прогоны, и теперь я хочу получить текст каждого прогона.Код ниже работает, но очень многословно.Можно ли получить текст экземпляра org.docx4j.wml.R более лаконичным образом?

public static Optional<String> runText(org.docx4j.wml.R run)
{
        return run.getContent()
                .stream()
                .map(JAXBElement.class::cast)
                .map(JAXBElement::getValue)
                .filter(Text.class::isInstance)
                .map(Text.class::cast)
                .map(Text::getValue)
                .findFirst();
}

Пока существуют «R :: getContent» и «R :: getRPr», яИнтересно, почему «R :: getText» не существует в текстовом документе.

1 Ответ

1 голос
/ 14 июня 2019

См. https://github.com/plutext/docx4j/blob/master/docx4j-core/src/main/java/org/docx4j/TextUtils.java#L55

, для которого Javadoc:

/**
 * Extract contents of descendant <w:t> elements. 
 * 
 * @param o
 * @return String
 * @since 6.0.0
 */
...