android - 在android中使用docx4j读取word doc时面临以下问题

标签 android docx4j

目的:在控制台上读取word文档的内容

使用环境:Windows 7 32bit Eclipse IDE 靛蓝 安卓 4.1 API 16 java 1.6 库:docx4j-2.8.0

以下是我用来在控​​制台上打印Word文档文本的代码 fragment

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(Environment.getExternalStorageDirectory().getAbsolutePath(), selectedFromList));

MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); 
System.out.println("file contents --->>>>>" +documentPart.getContent());    

DocPropsCorePart docPropsCorePart = wordMLPackage.getDocPropsCorePart();
CoreProperties coreProps = (CoreProperties)docPropsCorePart.getJaxbElement();

System.out.println("'dc:title' is " + coreProps.getTitle().getValue().getContent().get(0));
System.out.println(coreProps.getTitle().getValue().getClass().getName() );
System.out.println("'dcterms:created' is " + coreProps.getCreated().getClass().getName() );

当我尝试执行上述代码时,出现以下问题 eclipse logcat 显示以下日志

08-10 12:22:37.853: I/dalvikvm(1761): Could not find method javax.xml.bind.JAXBContext.createMarshaller, referenced from method 

org.docx4j.openpackaging.packages.WordprocessingMLPackage.save
08-10 12:22:37.853: W/dalvikvm(1761): VFY: unable to resolve virtual method 7579: Ljavax/xml/bind/JAXBContext;.createMarshaller ()Ljavax/xml/bind/Marshaller;
08-10 12:22:37.853: D/dalvikvm(1761): VFY: replacing opcode 0x6e at 0x0017

08-10 12:22:37.863: I/dalvikvm(1761): Could not find method javax.xml.bind.JAXBContext.createMarshaller, referenced from method 

org.docx4j.openpackaging.packages.WordprocessingMLPackage.transform

08-10 12:22:37.863: W/dalvikvm(1761): VFY: unable to resolve virtual method 7579: Ljavax/xml/bind/JAXBContext;.createMarshaller ()Ljavax/xml/bind/Marshaller;
08-10 12:22:37.863: D/dalvikvm(1761): VFY: replacing opcode 0x6e at 0x000d

08-10 12:22:37.863: I/dalvikvm(1761): Failed resolving Lorg/docx4j/jaxb/JaxbValidationEventHandler; interface 1254 'Ljavax/xml/bind/ValidationEventHandler;'
08-10 12:22:37.863: W/dalvikvm(1761): Link of class 'Lorg/docx4j/jaxb/JaxbValidationEventHandler;' failed

08-10 12:22:37.873: D/dalvikvm(1761): DexOpt: unable to opt direct call 0x46db at 0x1e in Lorg/docx4j/openpackaging/packages/WordprocessingMLPackage;.transform
08-10 12:22:37.873: D/dalvikvm(1761): DexOpt: unable to opt direct call 0x1dba at 0x26 in Lorg/docx4j/openpackaging/packages/WordprocessingMLPackage;.transform

08-10 12:22:37.883: E/dalvikvm(1761): Could not find class 'org.apache.poi.poifs.filesystem.POIFSFileSystem', referenced from method 

org.docx4j.openpackaging.packages.OpcPackage.load

08-10 12:22:37.883: W/dalvikvm(1761): VFY: unable to resolve new-instance 1658 (Lorg/apache/poi/poifs/filesystem/POIFSFileSystem;) in 

Lorg/docx4j/openpackaging/packages/OpcPackage;
08-10 12:22:37.883: D/dalvikvm(1761): VFY: replacing opcode 0x22 at 0x001a

08-10 12:22:37.893: I/dalvikvm(1761): Could not find method javax.xml.bind.JAXBContext.createUnmarshaller, referenced from method 

org.docx4j.openpackaging.packages.OpcPackage.load

08-10 12:22:37.893: W/dalvikvm(1761): VFY: unable to resolve virtual method 7580: Ljavax/xml/bind/JAXBContext;.createUnmarshaller ()Ljavax/xml/bind/Unmarshaller;
08-10 12:22:37.893: D/dalvikvm(1761): VFY: replacing opcode 0x6e at 0x004d

08-10 12:22:37.893: I/dalvikvm(1761): Could not find method javax.xml.bind.JAXBContext.createMarshaller, referenced from method 

org.docx4j.openpackaging.packages.OpcPackage.save

08-10 12:22:37.893: W/dalvikvm(1761): VFY: unable to resolve virtual method 7579: Ljavax/xml/bind/JAXBContext;.createMarshaller ()Ljavax/xml/bind/Marshaller;
08-10 12:22:37.893: D/dalvikvm(1761): VFY: replacing opcode 0x6e at 0x0017

08-10 12:22:37.905: D/dalvikvm(1761): DexOpt: unable to opt direct call 0x2654 at 0x1c in Lorg/docx4j/openpackaging/packages/OpcPackage;.load
08-10 12:22:37.905: D/dalvikvm(1761): DexOpt: unable to opt direct call 0x2651 at 0x21 in Lorg/docx4j/openpackaging/packages/OpcPackage;.load

08-10 12:22:37.905: I/dalvikvm(1761): Failed resolving Lorg/docx4j/jaxb/JaxbValidationEventHandler; interface 1254 'Ljavax/xml/bind/ValidationEventHandler;'
08-10 12:22:37.905: W/dalvikvm(1761): Link of class 'Lorg/docx4j/jaxb/JaxbValidationEventHandler;' failed

08-10 12:22:37.905: D/dalvikvm(1761): DexOpt: unable to opt direct call 0x46db at 0x53 in Lorg/docx4j/openpackaging/packages/OpcPackage;.load
08-10 12:22:37.963: W/System.err(1761): org.docx4j.openpackaging.exceptions.Docx4JException: Error reading from the stream

08-10 12:22:37.963: W/System.err(1761):     at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:239)
08-10 12:22:37.963: W/System.err(1761):     at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:195)
08-10 12:22:37.963: W/System.err(1761):     at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:178)
08-10 12:22:37.963: W/System.err(1761):     at org.docx4j.openpackaging.packages.WordprocessingMLPackage.load(WordprocessingMLPackage.java:172)
08-10 12:22:37.975: W/System.err(1761):     at com.reader.MainActivity$2.onItemClick(MainActivity.java:125)
08-10 12:22:37.975: W/System.err(1761):     at android.widget.AdapterView.performItemClick(AdapterView.java:298)
08-10 12:22:37.975: W/System.err(1761):     at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
08-10 12:22:37.975: W/System.err(1761):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2855)
08-10 12:22:37.975: W/System.err(1761):     at android.widget.AbsListView$1.run(AbsListView.java:3529)
08-10 12:22:37.984: W/System.err(1761):     at android.os.Handler.handleCallback(Handler.java:615)
08-10 12:22:37.984: W/System.err(1761):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-10 12:22:37.984: W/System.err(1761):     at android.os.Looper.loop(Looper.java:137)
08-10 12:22:37.984: W/System.err(1761):     at android.app.ActivityThread.main(ActivityThread.java:4745)
08-10 12:22:37.984: W/System.err(1761):     at java.lang.reflect.Method.invokeNative(Native Method)
08-10 12:22:37.993: W/System.err(1761):     at java.lang.reflect.Method.invoke(Method.java:511)
08-10 12:22:37.993: W/System.err(1761):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-10 12:22:37.993: W/System.err(1761):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-10 12:22:37.993: W/System.err(1761):     at dalvik.system.NativeStart.main(Native Method)
08-10 12:22:38.085: W/System.err(1761): Caused by: java.io.IOException: Mark has been invalidated.
08-10 12:22:38.085: W/System.err(1761):     at java.io.BufferedInputStream.reset(BufferedInputStream.java:350)
08-10 12:22:38.093: W/System.err(1761):     at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:237)

08-10 12:22:38.923: I/Choreographer(1761): Skipped 107 frames!  The application may be doing too much work on its main thread.

最佳答案

披露:我从事 docx4j 项目

您需要使用Android-specific branch of docx4j .

参见jaxb-can-be-made-to-run-on-android

我建议您获取AndroidDocxToHtml先工作,然后再继续。

关于android - 在android中使用docx4j读取word doc时面临以下问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897537/

相关文章:

java - 在 IDE 外部执行时出现 NoClassDefFoundError: org/docx4j/openpackaging/exceptions/Docx4JException

xpath - 我正在使用 docx4j 来读取 .docx 文件,我需要获取文档的段落并替换字符串

java - 如何删除 docx4j 中的自定义属性

android - 裁剪ImageViews的Canvas方法

Android:具有多个 UI Activity (多线程/处理程序)的蓝牙 SPP 应用程序的一般方向

java - 将文本绘制到像素图上 (LibGDX)

android - 实例变量在保留的 Fragment 中变为 null

android - 在 GameThread (android) 中开始由 bool 值触发的新 Activity

java - 如何使用内容控件数据绑定(bind) (docx) 重复整个页面

java - 使用 docx4j 从 .dotx 模板生成 .docx 文档(在 XPage 应用程序中)