Конвертировать слово в PDF - Использование DOCX4J в JavaJAVA

Программисты JAVA общаются здесь
Гость
Конвертировать слово в PDF - Использование DOCX4J в Java

Сообщение Гость »

У меня есть документ Word, сгенерированный с использованием Apache Poi. Я должен преобразовать его в PDF. Я исследовал и обнаружил, что Docx4J предоставляет без проблем для его преобразования. Следовательно, я попробовал это. Но когда я пытаюсь запустить, я получаю следующую ошибку. < /P>

Код: Выделить всё

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.he.capdes.reportingService.utility.WordDocUtil.convertToPdf(WordDocUtil.java:522)
............
Caused by: java.lang.RuntimeException: jakarta.xml.bind.JAXBException: JAXB: Can't instantiate JAXB Reference Implementation
- with linked exception:
[java.lang.ClassNotFoundException: org.docx4j.jaxb.ri.NamespacePrefixMapper]
at org.docx4j.XmlUtils.marshaltoString(XmlUtils.java:941)
at org.docx4j.openpackaging.parts.JaxbXmlPart.getXML(JaxbXmlPart.java:254)
at org.docx4j.convert.out.common.Preprocess.process(Preprocess.java:79)
at org.docx4j.convert.out.common.Preprocess.process(Preprocess.java:135)
at org.docx4j.convert.out.common.AbstractWmlExporter.preprocess(AbstractWmlExporter.java:70)
at org.docx4j.convert.out.common.AbstractWmlExporter.preprocess(AbstractWmlExporter.java:32)
at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:63)
... 61 more
Caused by: jakarta.xml.bind.JAXBException: JAXB: Can't instantiate JAXB Reference Implementation
- with linked exception:
[java.lang.ClassNotFoundException: org.docx4j.jaxb.ri.NamespacePrefixMapper]
at org.docx4j.jaxb.NamespacePrefixMapperUtils.tryUsingRI(NamespacePrefixMapperUtils.java:85)
at org.docx4j.jaxb.NamespacePrefixMapperUtils.getPrefixMapper(NamespacePrefixMapperUtils.java:61)
at org.docx4j.XmlUtils.marshaltoString(XmlUtils.java:889)
... 67 more
Caused by: java.lang.ClassNotFoundException: org.docx4j.jaxb.ri.NamespacePrefixMapper
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1374)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1183)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:421)
at java.base/java.lang.Class.forName(Class.java:412)
at org.docx4j.jaxb.NamespacePrefixMapperUtils.tryUsingRI(NamespacePrefixMapperUtils.java:69)
... 69 more
< /code>
Я также попробовал реализацию Glassfish Jaxb и затмение Moxy. Кажется, ничего не исправляет ошибка.  Ниже приведен pom.xml < /p>
        org.apache.poi
poi-ooxml
4.0.1


org.apache.commons
commons-compress






org.docx4j
docx4j-core
11.5.4


org.apache.commons
commons-compress






org.docx4j
docx4j-export-fo
11.5.4




jakarta.xml.bind
jakarta.xml.bind-api
4.0.2




org.glassfish.jaxb
jaxb-runtime
4.0.2




org.apache.xmlgraphics
fop
2.9




commons-io
commons-io
2.15.1



org.apache.commons
commons-compress
1.26.1



org.docx4j
docx4j-core
11.5.4




org.docx4j
docx4j-export-fo
11.5.4




jakarta.xml.bind
jakarta.xml.bind-api
4.0.2




org.eclipse.persistence
org.eclipse.persistence.moxy
4.0.2




org.eclipse.persistence
org.eclipse.persistence.core
4.0.2


org.eclipse.persistence
org.eclipse.persistence.asm
9.1.0


org.eclipse.persistence
org.eclipse.persistence.antlr
2.7.16

< /code>
ниже мой код Java < /p>
public static byte[] convertToPdf(XWPFDocument document) throws Exception {
// Step 1: Write XWPFDocument to memory
ByteArrayOutputStream docxBaos = new ByteArrayOutputStream();
document.write(docxBaos);

// Step 2:  Load into docx4j
ByteArrayInputStream docxInput = new ByteArrayInputStream(docxBaos.toByteArray());
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(docxInput);

// Step 3: Convert to PDF
try (ByteArrayOutputStream pdfBaos = new ByteArrayOutputStream()) {
FOSettings foSettings = Docx4J.createFOSettings();
foSettings.setWmlPackage(wordMLPackage);

Docx4J.toFO(foSettings, pdfBaos, Docx4J.FLAG_EXPORT_PREFER_XSL);

return pdfBaos.toByteArray();
}
}
Может ли кто -нибудь направить меня, где я ошибаюсь?

Подробнее здесь: https://stackoverflow.com/questions/797 ... 4j-in-java

Вернуться в «JAVA»