2016-11-16 5 views
0

ich versuche, eine docx-Datei mit Apache poi oder docx4j zu analysieren, aber ich brauche den Text als Zeile für Zeile, um es so zu speichern, wie es ist. Es ist mir jedoch nicht gelungen, einen Weg zu finden, um das zu erreichen, und nicht nur Absatztext. Könnten Sie mir eine Dokumentation, einen Link, eine Lösung oder was auch immer mir helfen, da ich nichts gefunden habe, das mir eine praktische Lösung geben könnte?DOCX-Datei zeilenweise in Java lesen

Vielen Dank im Voraus!

+4

Ich denke, es ein konzeptionelles Problem mit Ihrer Frage. Die Zeilenumbrüche in einem Word-Dokument hängen vom tatsächlichen Layout (Seitengröße, Schriftgröße und -typ, ...) ab. Das heißt, der Text eines Absatzes wird von wahrscheinlich allen Bibliotheken als eine einzige Textzeile behandelt. Und ich sehe tatsächlich keine Option (außer das Dokument zu rendern und OCR oder etwas ähnliches zu tun), um dies zu tun. – dpr

+0

Vielleicht teilen Sie das, was Sie mit diesem Parsing versuchen möchten, Zeile für Zeile, sodass jemand möglicherweise eine andere Lösung bereitstellt. – Tom

Antwort

0

Mit docx4j, können Sie sich alle docx Textellements mit diesem Code drucken, vielleicht kann es zu einem Zweck nützlich sein:

public static void main(String[] args) throws Exception{ 

    TestPrintLines test = new TestPrintLines(); 
    String inputfilepath = System.getProperty("user.dir") + "/"; 
    File file = new File(inputfilepath+"yourFile.docx"); 
    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(file); 
    List<Object> texts= getAllelementObjects(wordMLPackage.getMainDocumentPart(),Text.class); 
    test.printLines(texts); 
} 

static public List<Object> getAllelementObjects(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(getAllelementObjects(child, toSearch)); 
     } 

    } 
    return result; 
} 

static public void printLines(List<Object> objectsList){ 
    for(int i = 0; i<objectsList.size(); i++) {   
     Object text = objectsList.get(i); 
     Text textElement = (Text) text; 
     System.out.println(textElement.getValue()); 
    } 
}