2011-03-28 695 views
1

我想在MS Word文檔中獲取用Textbox寫的信息。我使用Apache POI來解析word文檔。如何使用Apache POI從MS Word文檔的文本框中獲取文本?

目前我遍歷所有的段落對象,但這段落列表不包含來自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從文本框中提取信息?

+0

格式:doc或docx? – JasonPlutext 2011-03-30 11:25:56

+0

@plutext,以doc格式開頭,但後來需要爲docx和rtf做同樣的事情。 – Shekhar 2011-03-31 10:44:51

+0

您可以考慮使用JODConverter + LibreOffice將所有三種格式轉換爲docx,然後使用POI(或docx4j)從docx中提取文本框內容。這樣你就不必擔心二進制格式,或者解析rtf。 – JasonPlutext 2011-03-31 12:07:15

回答

3

這爲我工作,

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

更新:原來並非所有的文本框都在給定示例中的模式中。這是另一個,textBoxObjects.addAll(Arrays.asList(paragraph.getCTP()。selectPath(「declare namespace w ='http://schemas.openxmlformats.org/wordprocessingml/2006/main'declare namespace v ='urn:schemas- microsoft-com:vml'.//*/v:textbox/w:txbxContent「)));.如果有人請分享,我沒有找到OOXML架構定義提供的文本框架完整列表。 – Chinmay 2014-09-18 17:15:21

0

如果你想從在的docx文件文本框的文本(使用POI 3.10決賽)這裏是示例代碼:

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( ) 方法。同樣的結果。

1

要提取從Word doc和docx文件文本的所有匹配的crgrep我用Apache Tika源作爲如何在Apache POI API應該正確使用參考。如果您想直接使用POI而不依賴Tika,這很有用。

對於Word .DOCX文件,看看這個提卡類:

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

如果你忽視XHTMLContentHandler和格式代碼,你可以看到如何正確導航XWPFDocument使用POI。 對於.doc文件這個類是有幫助的:

org.apache.tika.parser.microsoft.WordExtractor 

無論是從tika-parsers-1.x.jar。一個簡單的方法,通過你的Maven的依賴訪問蒂卡代碼是臨時添加到蒂卡你的pom.xml如

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

讓你的IDE解決連接源,並進入階級之上。

相關問題