2016-04-06 97 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; 
    } 

} 
相关问题