我需要将docx的所有文本放入字符串生成器中,还需要使用制表符和连字符。我尝试过使用org.docx4j.TextUtils,但在生成的字符串中看不到tab.
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();
根据我在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中没有作为普通字符表示。
选项卡为w:Tab
连字符可能是一个连字符,也可能显示(实际上不在docx中),也可能是:
http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/noBreakHyphen.html
或http://webapp.docx4java.org/OnlineDemo/ecma376/WordML/softHyphen.html
复制Word的连字符行为将是一个挑战。
但对于其他人,我想到了三种方法:
-
推广您的遍历方法(您是否使用TraversalUtil.getChildrenImpl?)
-
在XSLT中执行(可以在docx4j中执行,但XSLT可能较慢,而且是多种技术的混合)
-
将主文档部分封送为字符串,进行适当的字符串替换,然后取消封送,然后使用TextUtils
对于(3),假设MainDocumentPart mdp,将其作为字符串:
String stringContent = mdp.getXML();
然后注入修改后的内容:
mdp.setContents((Document)XmlUtils.unmarshalString(stringContent) );