2014-09-30 20 views
0

我需要將一個docx的所有文本放在一個字符串生成器中,也可以使用製表符和連字符。 我試過使用org.docx4j.TextUtils,但在結果字符串中沒有看到選項卡。用docx4j顯示一個字符串生成器中的docx的所有文本

String inputfilepath = System.getProperty("user.home") + "test.docx"; 
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath)); 
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); 
org.docx4j.wml.Document wmlDocumentEl = (org.docx4j.wml.Document)documentPart.getJaxbElement(); 
Writer out = new OutputStreamWriter(System.out); 
extractText(wmlDocumentEl, out); 
out.close(); 

回答

1

按我的答案在http://www.docx4java.org/forums/docx-java-f6/is-it-possible-to-extract-all-text-also-tab-and-hyphen-t1996.html#p6933?sid=b0d58fec2ba349d0f3f49cf66411397c

與標籤和連字符的問題,我想你知道的是,他們沒有在DOCX正常字符表示。

Tab是瓦特:標籤

連字符可能是一個連字符,或者它可能被顯示(沒有在DOCX實際上是),或者它可能是:

http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/noBreakHyphen.html

http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/softHyphen.html

複製Word的連字行爲將是一個挑戰。

但對於其他人,也有發生在我三種方法:

  1. 要概括(?您使用TraversalUtil.getChildrenImpl)

  2. 在XSLT做你的遍歷方法(你可以在docx4j中執行此操作,但XSLT可能較慢並且混合使用技術)

  3. 將主文檔部分編組爲字符串,執行適當的字符串替換,然後解組,然後使用TextUtils

對於(3),假設MainDocumentPart MDP,把它作爲一個字符串:

String stringContent = mdp.getXML(); 

然後注入修改的內容:

mdp.setContents((Document)XmlUtils.unmarshalString(stringContent)); 
+0

喜賈森,我使用(1.)方法getContent()。getChildren並分析所有的孩子(instanceof Run,sdtBlock,text R.Tab,R.SoftHyphen ecc ..)但是很難,因爲我必須處理許多文檔,每個文檔都有一個不同的結構,所以我害怕不能一概而論。我在(3)方法中更有趣,因爲我必須在文檔中搜索一個單詞的多少個實例。那麼我怎樣才能將主文檔編成一個字符串呢?它也是標籤? – Matt3o 2014-10-04 07:53:33

+0

查看更新的答案。是的,你會看到w:tab – JasonPlutext 2014-10-05 20:38:23

+0

我已經嘗試了第三種方法,但是我已經看到它在字符串中填充xml結構,所以它對我來說並不好,因爲字符分段運行。我認爲第一種方法更好,你有什麼提示來推廣遍歷方法嗎? – Matt3o 2014-10-06 08:49:23

相關問題