我需要将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();
答案 0 :(得分:1)
我猜你知道tab和连字符的问题在于它们在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) );