【问题标题】:docx4j 3.0 pdf export failing with Docx4JExceptiondocx4j 3.0 pdf 导出失败并出现 Docx4JException
【发布时间】:2014-01-23 01:59:57
【问题描述】:

我正在尝试使用 docx4j 3.0 加载现有的 docx 文件,进行一些简单的文本更改并保存为 PDF。我的代码如下所示:

        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load (new File (template));
        MainDocumentPart doc = wordMLPackage.getMainDocumentPart ();

        try
        {
            VariablePrepare.prepare (wordMLPackage);
        }
        catch (Exception e)
        {
            System.err.println ("Warning: VariablePrepare failed: " + e);
        }

                    (here I enumerate all Text nodes and make changes as required)

        PdfConversion c = new Conversion (wordMLPackage);
        try (FileOutputStream out = new FileOutputStream (outputFile)) {
            c.output (out, new PdfSettings ());
        }

这会产生以下异常:

org.docx4j.openpackaging.exceptions.Docx4JException: Exception exporting package
    at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:79)
    at org.docx4j.Docx4J.toFO(Docx4J.java:467)
    at org.docx4j.Docx4J.toPDF(Docx4J.java:477)
    at org.docx4j.convert.out.pdf.viaXSLFO.Conversion.output(Conversion.java:70)
    at net.meridiandigital.binco.invoicegen.InvoiceGenerator.generateFile(InvoiceGenerator.java:80)
    at net.meridiandigital.binco.invoicegen.Test.main(Test.java:46)
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Exception loading default template "org/docx4j/convert/out/fo/docx2fo.xslt", Cannot convert argument/return type in call to method 'org.docx4j.convert.out.common.XsltCommonFunctions.notImplemented(reference, node-type, string)'
    at org.docx4j.convert.out.common.AbstractXsltExporterDelegate.loadDefaultTemplates(AbstractXsltExporterDelegate.java:92)
    at org.docx4j.convert.out.common.AbstractXsltExporterDelegate.getDefaultTemplate(AbstractXsltExporterDelegate.java:75)
    at org.docx4j.convert.out.common.AbstractXsltExporterDelegate.getTemplates(AbstractXsltExporterDelegate.java:66)
    at org.docx4j.convert.out.common.AbstractXsltExporterDelegate.process(AbstractXsltExporterDelegate.java:57)
    at org.docx4j.convert.out.common.AbstractWmlExporter.process(AbstractWmlExporter.java:63)
    at org.docx4j.convert.out.common.AbstractWmlExporter.process(AbstractWmlExporter.java:32)
    at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:71)
    ... 5 more
Caused by: javax.xml.transform.TransformerConfigurationException: Cannot convert argument/return type in call to method 'org.docx4j.convert.out.common.XsltCommonFunctions.notImplemented(reference, node-type, string)'
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:945)
    at org.docx4j.XmlUtils.getTransformerTemplate(XmlUtils.java:842)
    at org.docx4j.convert.out.common.AbstractXsltExporterDelegate.loadDefaultTemplates(AbstractXsltExporterDelegate.java:88)
    ... 11 more

有什么想法吗?

【问题讨论】:

    标签: java xslt pdf docx4j


    【解决方案1】:

    它不应该使用

    com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

    而是

    org.apache.xalan.processor.TransformerFactoryImpl

    (您的类路径中需要真正的 Xalan)

    另请参阅https://github.com/plutext/docx4j/blob/master/src/main/java/org/docx4j/XmlUtils.java 第 224 行的实例化TransformerFactory()

    【讨论】:

    • 谢谢。不幸的是,您正在使用的日志系统决定不显示有用的消息,例如您默认包含在那里的消息(我个人的偏好是显示所有消息的系统,除非另有配置)而且我没有想出了如何配置日志记录,我错过了。 :(
    • 不过,有趣的是,我的类路径中确实有 xalan-2.7.1.jar ......但它对“serializer-2.7.1.jar”有传递依赖,我不知何故错过了。
    • (而且,是的,我知道我真的应该使用 maven...)
    • 公平地说,log.error("Warning: Xalan jar missing from classpath; xslt not supported",e); 很清楚!
    猜你喜欢
    • 2021-07-09
    • 2016-11-05
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    相关资源
    最近更新 更多