使用docx4j在stringBuilder中显示docx的所有文本

时间:2014-09-30 09:43:46

标签: docx docx4j

我需要将docx的所有文本放在stringBuilder中,也使用tab和连字符。 我已尝试使用org.docx4j.TextUtils,但在结果字符串中没有看到标签。

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 个答案:

答案 0 :(得分: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

的回答

我猜你知道tab和连字符的问题在于它们在docx中没有被表示为普通字符。

标签是w: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

  4. 对于(3),假设MainDocumentPart mdp,将其作为字符串获取:

    String stringContent = mdp.getXML();
    

    然后注入修改后的内容:

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