Java-docx4j-ImportXHTML:找不到NamespacePrefixMapper的问题

时间:2019-08-07 12:37:41

标签: java docx4j

我想将html内容转换为docx。

我正在使用docx4j-ImportXHTML和docx4j。

String xhtml= "<div>hello world <bold>bold character</bold></div>";

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);


wordMLPackage.getMainDocumentPart().getContent().addAll(
            XHTMLImporter.convert( xhtml, null) );

System.out.println(XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true));

wordMLPackage.save(new java.io.File("/home/out.docx") );

调用convert方法时出现此异常:

  

java.lang.RuntimeException:javax.xml.bind.JAXBException:无法创建   内部NamespacePrefixMapper    -具有链接的异常:[java.lang.ClassNotFoundException:org.docx4j.jaxb.suninternal.NamespacePrefixMapper]在   org.docx4j.XmlUtils.marshaltoString(XmlUtils.java:840)在   org.docx4j.XmlUtils.marshaltoString(XmlUtils.java:716)在   org.docx4j.model.styles.StyleTree.createVirtualStylesForDocDefaults(StyleTree.java:487)     在org.docx4j.model.styles.StyleTree。(StyleTree.java:107)在   org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart.getStyleTree(MainDocumentPart.java:202)     在   org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart.getStyleTree(MainDocumentPart.java:172)     在   org.docx4j.convert.in.xhtml.XHTMLImporterImpl.stylesToCSS(XHTMLImporterImpl.java:464)     在   org.docx4j.convert.in.xhtml.XHTMLImporterImpl.getRenderer(XHTMLImporterImpl.java:271)     在   org.docx4j.convert.in.xhtml.XHTMLImporterImpl.convert(XHTMLImporterImpl.java:663)

1 个答案:

答案 0 :(得分:0)

首先从3.0.0升级到docx4j 8.1.x:https://www.docx4java.org/downloads.html

(无需更改您的ImportXHTML版本)。

此外,您还需要确保HTML格式正确的XML。因此,请将示例放在

或标签中。