2016-04-06 9 views
0

Ich habe ein Word-Dokument (.docx), die basierend auf einer Vorlage erstellt wurde. Es hat 4 Abschnitte: Titel, Dokumenttyp, Identifikation und Unterschrift.Lesen Sie Abschnitte aus Word-Dokumenten mit Apache POI

Ich habe nach einer Möglichkeit gesucht, die Abschnitte mit Apache POIs XWPF zu lesen. Irgendein Rat?

+0

Welches Format sind mit dem Sie arbeiten - '.doc' (HWPF) oder' .docx' (XWPF)? – Gagravarr

+0

ich benutze .docx (XWPF) –

+1

Bitte beschreiben Sie, was Sie versucht haben oder wie weit Sie in den Code hineingekommen sind und wo Sie stecken geblieben sind, damit die Leute darauf aufbauen können, wenn Sie antworten. – centic

Antwort

0

Ich habe die Lösung gefunden, die ich als Kommentar an der Spitze brauchte, war durch das Dokument und Blöcke Abschnitt des Word-Dokuments zu bekommen.

die Informationen verwenden, auf der nächsten Seite

APACHE SVN TestXWPFSDT

Was sie tut, ist durch das Dokument alle Abschnitte zu retten.

Der Code in meinem Projekt verwendet wurde, war gut

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; 
    } 

}