提问人:Volper 提问时间:6/17/2023 更新时间:6/17/2023 访问量:89
尝试使用 Docx4J 转换为 PDF:没有虚拟方法 getModule()Ljava/lang/Module
Trying to convert to PDF with Docx4J: No virtual method getModule()Ljava/lang/Module
问:
我正在尝试使用 Docx4J 将 .docx 文件转换为 .pdf。我收到此错误:
FATAL EXCEPTION: main
Process: com.example.docx4jtest, PID: 9798
java.lang.NoSuchMethodError: No virtual method getModule()Ljava/lang/Module; in class Ljava/lang/Class; or its super classes (declaration of 'java.lang.Class' appears in /apex/com.android.art/javalib/core-oj.jar)
at jakarta.xml.bind.ModuleUtil.delegateAddOpensToImplModule(ModuleUtil.java:111)
at jakarta.xml.bind.ContextFinder.find(ContextFinder.java:323)
at jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:392)
at org.docx4j.jaxb.Context.<clinit>(Context.java:121)
at org.docx4j.openpackaging.contenttype.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:849)
at org.docx4j.openpackaging.io3.Load3.get(Load3.java:146)
at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:572)
at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:421)
at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:298)
at org.docx4j.openpackaging.packages.OpcPackage.load(OpcPackage.java:276)
at org.docx4j.openpackaging.packages.WordprocessingMLPackage.load(WordprocessingMLPackage.java:170)
at com.example.docx4jtest.MainActivity.onCreate(MainActivity.java:58)
at android.app.Activity.performCreate(Activity.java:8290)
at android.app.Activity.performCreate(Activity.java:8269)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3657)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
这个确切的错误消息只在 Google 搜索上出现过一次,那里没有 Docx4J 的迹象。
法典:
String tag = "Docx4J Test";
try {
WordprocessingMLPackage mlPackage = WordprocessingMLPackage.load(getFilesDir().toPath().resolve("template-default.docx").toFile());
mlPackage.save(getFilesDir().toPath().resolve("result.docx").toFile());
Log.d(tag, "SAVED");
FileOutputStream outputStream = new FileOutputStream(getFilesDir().toPath().resolve("result.pdf").toFile());
Docx4J.toPDF(mlPackage, outputStream);
Log.d(tag, "SUCCESS");
} catch (Docx4JException | FileNotFoundException e) {
Log.d(tag, "onCreate: ".concat(e.getMessage()));
}
我将这些依赖项添加到:app/build.gradle
implementation("org.docx4j:docx4j-JAXB-ReferenceImpl:8.3.3") {
exclude group: "commons-logging"
}
implementation "com.fasterxml:aalto-xml:1.3.2"
implementation "javax.xml.stream:stax-api:1.0-2"
implementation files("libs/awt-bastardised-17v8.jar") // https://github.com/plutext/Docx4j4Android4/blob/master/app/libs/awt-bastardised-17v8.jar
implementation("org.docx4j:docx4j-export-fo:11.4.8") {
exclude group: "org.apache.xmlgraphics"
}
implementation "org.glassfish.jaxb:jaxb-runtime:4.0.3"
更改为 MOXy 不起作用 - 同样的错误。我尝试降级,但出现不同的错误。jaxb-runtime
下面是完整的示例,因此您可以自己运行它: https://github.com/Volper212/docx4j-test
请记住,为了运行它,您需要在应用程序()的目录中有一个文件。这可以是任何有效的 .docx 文件。template-default.docx
files
/data/user/0/com.example.docx4jtest/files/template-default.docx
为了达到这一点,我使用了以下资源:
答: 暂无答案
评论
JAXBContext
根据该错误,预计在 JVM 上运行,而不是在 Android 上运行。请注意,您的样本已有 6-7 年的历史,这是相当古老的,并且可能基于各种库的旧版本。Docx4j4Android4