2016-04-06 129 views
0

我有一個基於模板創建的Word文檔(.docx)。它有4個部分:標題,文件類型,標識和簽名。使用Apache POI從Word文檔中讀取部分

我一直在尋找一種方法來閱讀使用Apache POI的XWPF的部分。有什麼建議?

+0

與Google合作的哪種格式 - '.doc'(HWPF)或'.docx'(XWPF)? – Gagravarr

+0

我使用.docx(XWPF) –

+1

請描述您嘗試了什麼,或者您在代碼中擁有多少距離,以及您遇到困難的位置,以便人們在回答時可以基於此。 – centic

回答

0

我已經找到了解決方案,我需要作爲頂部的註釋是通過文檔並獲取word文檔的塊部分。

使用下一頁

APACHE SVN TestXWPFSDT

它的作用是通過文檔拯救所有部分中提供的信息。

在我的項目中使用的代碼是很好

public class decodeWord { 

public static void main(String[] args) { 

     FileInputStream fis = null; 

     try { 

      fis = new FileInputStream("/WORKSPACE/TestDoc.docx"); 
      XWPFDocument xdoc = new XWPFDocument(OPCPackage.open(fis)); 

      List<AbstractXWPFSDT> sdts = extractAllSDTs(xdoc); 
      for (AbstractXWPFSDT sdt : sdts) { 
       System.out.println(sdt.getTag() + " " + sdt.getContent().getText()); 
      } 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    private static List<AbstractXWPFSDT> extractAllSDTs(XWPFDocument doc) { 

     List<AbstractXWPFSDT> sdts = new ArrayList<AbstractXWPFSDT>(); 

     List<XWPFHeader> headers = doc.getHeaderList(); 
     for (XWPFHeader header : headers) { 
      sdts.addAll(extractSDTsFromBodyElements(header.getBodyElements())); 
     } 
     sdts.addAll(extractSDTsFromBodyElements(doc.getBodyElements())); 

     List<XWPFFooter> footers = doc.getFooterList(); 
     for (XWPFFooter footer : footers) { 
      sdts.addAll(extractSDTsFromBodyElements(footer.getBodyElements())); 
     } 

     for (XWPFFootnote footnote : doc.getFootnotes()) { 
      sdts.addAll(extractSDTsFromBodyElements(footnote.getBodyElements())); 
     } 
     return sdts; 
    } 

    private static List<AbstractXWPFSDT> extractSDTsFromBodyElements(List<IBodyElement> elements) { 
     List<AbstractXWPFSDT> sdts = new ArrayList<AbstractXWPFSDT>(); 
     for (IBodyElement e : elements) { 
      if (e instanceof XWPFSDT) { 
       XWPFSDT sdt = (XWPFSDT) e; 
       sdts.add(sdt); 
      } else if (e instanceof XWPFParagraph) { 

       XWPFParagraph p = (XWPFParagraph) e; 
       for (IRunElement e2 : p.getIRuns()) { 
        if (e2 instanceof XWPFSDT) { 
         XWPFSDT sdt = (XWPFSDT) e2; 
         sdts.add(sdt); 
        } 
       } 
      } else if (e instanceof XWPFTable) { 
       XWPFTable table = (XWPFTable) e; 
       sdts.addAll(extractSDTsFromTable(table)); 
      } 
     } 
     return sdts; 
    } 

    private static List<AbstractXWPFSDT> extractSDTsFromTable(XWPFTable table) { 

     List<AbstractXWPFSDT> sdts = new ArrayList<AbstractXWPFSDT>(); 
     for (XWPFTableRow r : table.getRows()) { 
      for (ICell c : r.getTableICells()) { 
       if (c instanceof XWPFSDTCell) { 
        sdts.add((XWPFSDTCell) c); 
       } else if (c instanceof XWPFTableCell) { 
        sdts.addAll(extractSDTsFromBodyElements(((XWPFTableCell) c).getBodyElements())); 
       } 
      } 
     } 
     return sdts; 
    } 

} 
相關問題