Reputation: 9018
I am trying to convert docx into png file using doc4x and running into some error.
Gradle entries,
// https://mvnrepository.com/artifact/org.docx4j/docx4j
implementation group: 'org.docx4j', name: 'docx4j', version: '6.1.2'
// https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api
implementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.4.0-b180830.0359'
// https://mvnrepository.com/artifact/org.docx4j/docx4j-export-fo
implementation group: 'org.docx4j', name: 'docx4j-export-fo', version: '11.4.5'
// https://mvnrepository.com/artifact/jakarta.xml.bind/jakarta.xml.bind-api
implementation group: 'jakarta.xml.bind', name: 'jakarta.xml.bind-api', version: '4.0.0-RC3'
Java code,
public static void main(String args[]) throws Exception {
String sourceFile = "/Users/test/test1.docx";
String destFile = "/Users/test/test1.png";
File theFile = new File(sourceFile);
File outile=new File(destFile);
WordprocessingMLPackage wordMLPckg = Docx4J.load(theFile);
OutputStream os = new FileOutputStream(outile);
FOSettings settings = Docx4J.createFOSettings();
settings.setWmlPackage(wordMLPckg);
settings.setApacheFopMime(MimeConstants.MIME_PNG);
Docx4J.toFO(settings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
os.close();
}
Error,
17:48:29.976 [main] ERROR org.docx4j.XmlUtils - java.lang.NoSuchMethodError: 'jakarta.xml.bind.JAXBElement org.docx4j.wml.ObjectFactory.createRT(org.docx4j.wml.Text)'
javax.xml.transform.TransformerException: java.lang.NoSuchMethodError: 'jakarta.xml.bind.JAXBElement org.docx4j.wml.ObjectFactory.createRT(org.docx4j.wml.Text)'
at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:417) ~[xalan-2.7.2.jar:?]
at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:440) ~[xalan-2.7.2.jar:?]
at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:222) ~[xalan-2.7.2.jar:?]
at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:475) ~[xalan-2.7.2.jar:?]
at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:208) ~[xalan-2.7.2.jar:?]
at org.apache.xpath.XPath.execute(XPath.java:337) [xalan-2.7.2.jar:2.7.2]
at org.apache.xalan.templates.ElemCopyOf.execute(ElemCopyOf.java:134) [xalan-2.7.2.jar:?]
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2402) [xalan-2.7.2.jar:?]
Caused by: java.lang.NoSuchMethodError: 'jakarta.xml.bind.JAXBElement org.docx4j.wml.ObjectFactory.createRT(org.docx4j.wml.Text)'
at org.docx4j.convert.out.fo.FOPAreaTreeHelper.createFillerP(FOPAreaTreeHelper.java:167) ~[docx4j-export-fo-11.4.5.jar:?]
at org.docx4j.convert.out.fo.FOPAreaTreeHelper.trimContent(FOPAreaTreeHelper.java:100) ~[docx4j-export-fo-11.4.5.jar:?]
at org.docx4j.convert.out.fo.LayoutMasterSetBuilder.fixExtents(LayoutMasterSetBuilder.java:136) ~[docx4j-export-fo-11.4.5.jar:?]
at org.docx4j.convert.out.fo.LayoutMasterSetBuilder.getLayoutMasterSetFragment(LayoutMasterSetBuilder.java:97) ~[docx4j-export-fo-11.4.5.jar:?]
at org.docx4j.convert.out.fo.XsltFOFunctions.getLayoutMasterSetFragment(XsltFOFunctions.java:85) ~[docx4j-export-fo-11.4.5.jar:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:567) ~[?:?]
at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:343) ~[xalan-2.7.2.jar:?]
... 24 more
17:48:30.002 [main] ERROR org.docx4j.XmlUtils - java.lang.NoSuchFieldError: jc
javax.xml.transform.TransformerException: java.lang.NoSuchFieldError: jc
at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:417) ~[xalan-2.7.2.jar:?]
at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:440) ~[xalan-2.7.2.jar:?]
at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:222) ~[xalan-2.7.2.jar:?]
at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:475) ~[xalan-2.7.2.jar:?]
at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:208) ~[xalan-2.7.2.jar:?]
at org.apache.xpath.XPath.execute(XPath.java:337) [xalan-2.7.2.jar:2.7.2]
Caused by: java.lang.NoSuchFieldError: jc
at org.docx4j.convert.out.fo.XsltFOFunctions.createBlock(XsltFOFunctions.java:324) ~[docx4j-export-fo-11.4.5.jar:?]
at org.docx4j.convert.out.fo.XsltFOFunctions.createBlockForPPr(XsltFOFunctions.java:141) ~[docx4j-export-fo-11.4.5.jar:?]
at jdk.internal.reflect.GeneratedMethodAccessor51.invoke(Unknown Source) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:567) ~[?:?]
at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:300) ~[xalan-2.7.2.jar:?]
... 32 more
Exception in thread "main" org.docx4j.openpackaging.exceptions.Docx4JException: Exception exporting package
at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:106)
at org.docx4j.Docx4J.toFO(Docx4J.java:734)
at com.whskr.service.admin.report.spring.handler.Test.main(Test.java:71)
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: You must invoke FORendererApacheFOP.getFOUserAgent
at org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:124)
at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:168)
at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:47)
at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:81)
... 2 more
Upvotes: 0
Views: 1674
Reputation: 41
I had to remove the docx4j dependency
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>6.1.2</version>
</dependency>
Now my pom.xml looks like this :
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
<version>11.4.9</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-JAXB-MOXy</artifactId>
<version>11.4.9</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-export-fo</artifactId>
<version>11.4.9</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop</artifactId>
<version>2.8</version>
</dependency>
Upvotes: 1
Reputation: 83
Jason, we are actually a paying customer for your Plutext-Enterprise library.
We are upgrading both docx4j-JAXB-ReferenceImpl and docx4j-export-fo to version 11.4.9, and we are hitting the same error (see stack trace below). We have upped to use JAXB 3 instead (Maven dependencies included below too).
We have hit a wall here. Any advice is hugely appreciated!
Error when calling Docx4J.toFO:
org.docx4j.openpackaging.exceptions.Docx4JException: Exception exporting package
at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:108)
at org.docx4j.Docx4J.toFO(Docx4J.java:711)
at com.hmsinc.epicenter.docx4j.DocxDocument.savePdf(DocxDocument.java:154)
at com.hmsinc.epicenter.docx4j.DocxDocument.save(DocxDocument.java:138)
at com.hmsinc.epicenter.docx4j.DocxDocumentTest.testDataLatencyDoc(DocxDocumentTest.java:258)
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: You must invoke FORendererApacheFOP.getFOUserAgent
at org.docx4j.convert.out.fo.renderers.FORendererApacheFOP.render(FORendererApacheFOP.java:124)
at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:168)
at org.docx4j.convert.out.fo.AbstractFOExporter.postprocess(AbstractFOExporter.java:47)
at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:83)
... 28 more
Our Maven dependencies as follows:
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
<version>11.4.9</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-export-fo</artifactId>
<version>11.4.9</version>
</dependency>
<dependency>
<groupId>com.plutext</groupId>
<artifactId>Plutext-Enterprise</artifactId>
<version>3.2.0.10</version>
</dependency>
Upvotes: 0
Reputation: 15863
docx4j 11.4.5 is the first release to use jakarta.xml.bind (as opposed to the previous javax.xml.bind).
So if you are using docx4j-export-fo version 11.4.5, do not add jaxb-api v2.4; you need jakarta.xml.bind:jakarta.xml.bind-api:jar:3.0.1
And don't add docx4j v6.1.2!
Upvotes: 0
Reputation: 21
I had a similar error. After I deleted docx4j
dependency, it's ok.
I have a example.
pom.xml properties
<docx4j-JAXB-Internal.version>8.3.4</docx4j-JAXB-Internal.version>
<docx4j-JAXB-ReferenceImpl.version>8.3.4</docx4j-JAXB-ReferenceImpl.version>
<docx4j-JAXB-MOXy.version>8.3.4</docx4j-JAXB-MOXy.version>
<docx4j-export-fo.version>8.3.4</docx4j-export-fo.version>
pom.xml dependencies
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-JAXB-Internal</artifactId>
<version>${docx4j-JAXB-Internal.version}</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
<version>${docx4j-JAXB-ReferenceImpl.version}</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-JAXB-MOXy</artifactId>
<version>${docx4j-JAXB-MOXy.version}</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-export-fo</artifactId>
<version>${docx4j-export-fo.version}</version>
</dependency>
docx to png
public static void docx2Png(String docxPath, String pngPath) throws Exception {
FileInputStream fis = new FileInputStream(docxPath);
WordprocessingMLPackage wordPackage = WordprocessingMLPackage.load(fis);
// font mapper
wordPackage.setFontMapper(IFontHandler.getFontMapper());
FOSettings foSettings = Docx4J.createFOSettings();
foSettings.setApacheFopMime(MimeConstants.MIME_PNG);
foSettings.setOpcPackage(wordPackage);
FopFactoryBuilder fopFactoryBuilder = FORendererApacheFOP.getFopFactoryBuilder(foSettings);
FORendererApacheFOP.getFOUserAgent(foSettings, fopFactoryBuilder.build());
FileOutputStream fos = new FileOutputStream(pngPath);
Docx4J.toFO(foSettings, fos, Docx4J.FLAG_EXPORT_PREFER_XSL);
fos.flush();
fos.close();
fis.close();
}
Upvotes: 1