2016-12-23 100 views
0

我有一個項目需要讀取docx文件的所有內容,但我不知道如何獲取它。我能得到的所有東西只是段落列表。我想進去文本框的數據太 這裏是我的代碼:java - 如何通過docx4j獲取docx文件中的Textbox數據

List<Object> texts = getAllElementFromObject(document.getMainDocumentPart(), P.class); 

我試圖使用方法getAllElementFromObject(document.getMainDocumentPart(), CTTextbox.class);

,但不能仍然獲得文本框的數據。

我的方法getAllElementFromObject()

public static List<Object> getAllElementFromObject(Object obj, Class<?> toSearch) { 
    List<Object> result = new ArrayList<Object>(); 
    if (obj instanceof JAXBElement) obj = ((JAXBElement<?>) obj).getValue(); 

    if (obj.getClass().equals(toSearch)) 
     result.add(obj); 
    else if (obj instanceof ContentAccessor) { 
     List<?> children = ((ContentAccessor) obj).getContent(); 
     for (Object child : children) { 
      result.addAll(getAllElementFromObject(child, toSearch)); 
     } 
    } 
    return result; 
} 

回答

0

的文本框在Word中創建看起來像:

<w:p > 
     <w:r > 
      <w:pict> 
       <v:shapetype o:spt="202.0" path="m,l,21600r21600,l21600,xe" coordsize="21600,21600" id="_x0000_t202"> 
        <v:stroke joinstyle="miter"/> 
        <v:path gradientshapeok="t" o:connecttype="rect"/> 
       </v:shapetype> 
       <v:shape o:gfxdata="UEsDB..8EAABkcnMvZG93bnJldzAAAAhwUAAAAA" type="#_x0000_t202" style="position:absolute;margin-left:0;margin-top:0;width:186.95pt;height:110.55pt;z-index:251659264;visibility:visible;mso-wrap-style:square;mso-width-percent:400;mso-height-percent:200;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:center;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;mso-width-percent:400;mso-height-percent:200;mso-width-relative:margin;mso-height-relative:margin;v-text-anchor:top" id="Text Box 2" o:spid="_x0000_s1026"> 
        <v:textbox style="mso-fit-shape-to-text:t"> 
         <w:txbxContent> 
<w:p > 
    <w:r> 
     <w:t>foo</w:t> 
    </w:r> 
</w:p> 
          </w:txbxContent> 
         </v:textbox> 
        </v:shape> 
       </w:pict> 
      </w:r> 
     </w:p> 

這裏相關的對象是:

  • org.docx4j.vml。 CTTextbox
  • org.docx4j.wml.CTTxbxContent(which might包含內容控件)

由於Pict未實現ContentAccessor,因此您的代碼無法運行。

所以,請嘗試https://github.com/plutext/docx4j/blob/master/src/main/java/org/docx4j/finders/ClassFinder.java

相關問題