Как получить текст из текстового поля документа MS Word, используя Apache POI? - PullRequest
1 голос
/ 28 марта 2011

Я хочу получить информацию, записанную в текстовом поле, в документе MS Word. Я использую Apache POI для разбора документа Word.

В настоящее время я перебираю все объекты Paragraph, но этот список Paragraph не содержит информации из TextBox, поэтому мне не хватает этой информации в выводе.

например

paragraph in plain text

**<some information in text box>**

one more paragraph in plain text

что я хочу извлечь:

<para>paragraph in plain text</para>

<text_box>some information in text box</text_box>

<para>one more paragraph in plain text</para>

что я получаю в настоящее время:

абзац простым текстом

еще один абзац в простом тексте

Кто-нибудь знает, как извлечь информацию из текстового поля с помощью Apache POI?

Ответы [ 3 ]

3 голосов
/ 16 сентября 2014

Это сработало для меня,

private void printContentsOfTextBox(XWPFParagraph paragraph) {

    XmlObject[] textBoxObjects =  paragraph.getCTP().selectPath("
        declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' 
        declare namespace wps='http://schemas.microsoft.com/office/word/2010/wordprocessingShape' .//*/wps:txbx/w:txbxContent");

    for (int i =0; i < textBoxObjects.length; i++) {
        XWPFParagraph embeddedPara = null;
        try {
        XmlObject[] paraObjects = textBoxObjects[i].
            selectChildren(
            new QName("http://schemas.openxmlformats.org/wordprocessingml/2006/main", "p"));

        for (int j=0; j<paraObjects.length; j++) {
            embeddedPara = new XWPFParagraph(
                CTP.Factory.parse(paraObjects[j].xmlText()), paragraph.getBody());
            //Here you have your paragraph; 
            System.out.println(embeddedPara.getText());
        } 

        } catch (XmlException e) {
        //handle
        }
    }

 } 
1 голос
/ 14 марта 2015

Чтобы извлечь все вхождения текста из файлов Word .doc и .docx для crgrep , я использовал источник Apache Tika в качестве ссылки на то, как правильно использовать API-интерфейсы Apache POI. , Это полезно, если вы хотите использовать POI напрямую и не зависеть от Tika.

Для файлов Word .docx взгляните на этот класс Tika:

org.apache.tika.parser.microsoft.ooxml.XWPFWordExtractorDecorator

если вы игнорируете XHTMLContentHandler и форматируете код, вы можете увидеть, как правильно перемещаться по XWPFDocument с помощью POI. Для файлов .doc этот класс полезен:

org.apache.tika.parser.microsoft.WordExtractor

оба из tika-parsers-1.x.jar. Простой способ получить доступ к коду Tika через ваши зависимости maven - это временно добавить Tika в ваш файл pom.xml, например

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>1.7</version>
</dependency>

пусть ваша IDE разрешит подключенный источник и перейдет к указанным выше классам.

0 голосов
/ 23 апреля 2014

Если вы хотите получить текст из текстового поля в файле docx (используя POI 3.10-FINAL ), вот пример кода:

FileInputStream fileInputStream = new FileInputStream(inputFile);
XWPFDocument document = new XWPFDocument(OPCPackage.open(fileInputStream)); 
for (XWPFParagraph xwpfParagraph : document.getParagraphs()) {
     String text = xwpfParagraph.getParagraphText(); //here is where you receive text from textbox
}

Или вы можете перебирать каждый XWPFRun в XWPFParagraphи вызвать метод toString ().Тот же результат.

...