使用 Docx4j 从 Docx 文件中读取文本
Reading text from Docx File using Docx4j
您好,我正在尝试使用 Docx4j 从一个 Docx 文件中读取数据,因此我可以将其插入到另一个文件中。我的代码如下:
public void getTextFromOtherFile() throws Docx4JException, JAXBException {
File doc = new File("D:\helloWorld.docx");
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(doc);
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
System.out.println(mainDocumentPart.getXML());
}
代码运行良好。但是只要我在上述方法的末尾插入以下行,该方法就会开始生成异常:
List<Object> jAXBNodesViaXPath = mainDocumentPart.getJAXBNodesViaXPath("//w:t", true);
我遇到的异常情况如下:
SEVERE: Servlet.service() for servlet [jsp] in context with path [/osses] threw exception [javax.servlet.ServletException: java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler.<init>(Z)V] with root cause
java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler.(Z)V
在 org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:1459)
在 org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:96)
在 org.docx4j.utils.XmlSerializerUtil.serialize(XmlSerializerUtil.java:18)
在 org.docx4j.XmlUtils.w3CDomNodeToString(XmlUtils.java:833)
在 org.docx4j.XmlUtils.xpath(XmlUtils.java:1206)
在 org.docx4j.XmlUtils.xpath(XmlUtils.java:1200)
在 org.docx4j.XmlUtils.getJAXBAssociationsForXPath(XmlUtils.java:1191)
在 org.docx4j.XmlUtils.getJAXBNodesViaXPath(XmlUtils.java:1133)
在 org.docx4j.openpackaging.parts.JaxbXmlPartXPathAware.getJAXBNodesViaXPath(JaxbXmlPartXPathAware.java:190)
在 Business.SelectionBean.getTextFromOtherFile(SelectionBean.java:1087)
在 org.apache.jsp.test_jsp._jspService(test_jsp.java:95)
在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439)
在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
在 javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
在 Business.NoCacheFilter.doFilter(NoCacheFilter.java:36)
在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
在 java.lang.Thread.run(Thread.java:745)
我的word文件有两行,如下:
你好我的名字是abcd。
我喜爱我的工作。
从前 7 天开始,我一直停留在这一点上,但无法解决此问题。我还包含了不同的 jar 文件(Xalan、xml-apis-1.3.04、serializer-2.7.2),但没有成功。我在工作中使用 docx4j-6.0.1.jar。
谁能指导我解决这个问题。提前致谢。
适合我(docx4j 6.0.1、Xalan 2.7.2、序列化程序 2.7.2)
我猜你的类路径不包含你认为它包含的 jars。
org.apache.xml.utils.DefaultErrorHandler 在 Xalan 2.7.2 中。
此外,堆栈跟踪中的行号:
java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler.(Z)V
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:1459)
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:96)
与 docx4j 源代码不匹配,所以很奇怪。
您好,我正在尝试使用 Docx4j 从一个 Docx 文件中读取数据,因此我可以将其插入到另一个文件中。我的代码如下:
public void getTextFromOtherFile() throws Docx4JException, JAXBException {
File doc = new File("D:\helloWorld.docx");
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(doc);
MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart();
System.out.println(mainDocumentPart.getXML());
}
代码运行良好。但是只要我在上述方法的末尾插入以下行,该方法就会开始生成异常:
List<Object> jAXBNodesViaXPath = mainDocumentPart.getJAXBNodesViaXPath("//w:t", true);
我遇到的异常情况如下:
SEVERE: Servlet.service() for servlet [jsp] in context with path [/osses] threw exception [javax.servlet.ServletException: java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler.<init>(Z)V] with root cause
java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler.(Z)V 在 org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:1459) 在 org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:96) 在 org.docx4j.utils.XmlSerializerUtil.serialize(XmlSerializerUtil.java:18) 在 org.docx4j.XmlUtils.w3CDomNodeToString(XmlUtils.java:833) 在 org.docx4j.XmlUtils.xpath(XmlUtils.java:1206) 在 org.docx4j.XmlUtils.xpath(XmlUtils.java:1200) 在 org.docx4j.XmlUtils.getJAXBAssociationsForXPath(XmlUtils.java:1191) 在 org.docx4j.XmlUtils.getJAXBNodesViaXPath(XmlUtils.java:1133) 在 org.docx4j.openpackaging.parts.JaxbXmlPartXPathAware.getJAXBNodesViaXPath(JaxbXmlPartXPathAware.java:190) 在 Business.SelectionBean.getTextFromOtherFile(SelectionBean.java:1087) 在 org.apache.jsp.test_jsp._jspService(test_jsp.java:95) 在 org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 在 org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:439) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 在 org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 Business.NoCacheFilter.doFilter(NoCacheFilter.java:36) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)
我的word文件有两行,如下: 你好我的名字是abcd。 我喜爱我的工作。 从前 7 天开始,我一直停留在这一点上,但无法解决此问题。我还包含了不同的 jar 文件(Xalan、xml-apis-1.3.04、serializer-2.7.2),但没有成功。我在工作中使用 docx4j-6.0.1.jar。 谁能指导我解决这个问题。提前致谢。
适合我(docx4j 6.0.1、Xalan 2.7.2、序列化程序 2.7.2)
我猜你的类路径不包含你认为它包含的 jars。
org.apache.xml.utils.DefaultErrorHandler 在 Xalan 2.7.2 中。
此外,堆栈跟踪中的行号:
java.lang.NoSuchMethodError: org.apache.xml.utils.DefaultErrorHandler.(Z)V
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:1459)
at org.docx4j.org.apache.xalan.transformer.TransformerIdentityImpl.(TransformerIdentityImpl.java:96)
与 docx4j 源代码不匹配,所以很奇怪。