2016-11-16 176 views
0

我想解析一個使用Apache poi或docx4j的docx文件,但我需要逐行的文本以便按原樣存儲它。儘管我沒有設法找到實現該方法的方法,而不是段落文本。你能給我提供一個文檔,鏈接,解決方案或任何可以幫助我,因爲我沒有找到任何可以給我一個實際的解決方案。在Java中逐行讀取docx文件

在此先感謝!

+4

我覺得這是你的問題的一個概念性問題。 Word文檔中的換行符取決於實際的佈局(頁面大小,字體大小和類型等)。也就是說,一段文字可能被所有圖書館視爲單一文本行。而且我實際上看不到任何選擇(除了渲染文檔並執行一些OCR或類似的操作)。 – dpr

+0

也許你可能會一行一行地分享你試圖實現的解析,所以有人可能會提供另一種解決方案。 – Tom

回答

0

使用DOCX4J,您可以打印使用此代碼每DOCX文本ellements,也許它可能是有用的,以你的目的:

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