2016-11-16 28 views
0

私はApache poiまたはdocx4jを使ってdocxファイルを解析しようとしていますが、そのまま保存するためには行ごとにテキストが必要です。私は、段落のテキストではなく、それを達成する方法を見つけるために管理していません。私は実用的な解決策を与えることができる何かを見つけられなかったので、私にドキュメンテーション、リンク、ソリューションなどを教えてもらえますか?docxファイルをJavaで1行ずつ読む

ありがとうございます! DOCX4Jを使用して

+4

私はあなたの質問との概念的な問題があると思います。 Word文書の改行は、実際のレイアウト(ページサイズ、フォントサイズ、タイプなど)によって異なります。段落のテキストはおそらくすべてのライブラリの周りの単一のテキスト行として扱われます。実際には、(ドキュメントをレンダリングしてOCRなどをする以外の)オプションはありません。 – dpr

+0

おそらく、あなたが達成しようとしていることをこの行ごとに分かち合うかもしれないので、誰かが別の解決法を提供する可能性があります。 – Tom

答えて

0

、あなたは多分それはあなたの目的に役に立つことができ、このコードを使用して、すべての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()); 
    } 
} 
関連する問題