我正在尝试使用docx4j生成报告。我设法创建了一个单词模板,并根据我的数据创建了XML绑定。

我可以使用docx4j基于此生成docx输出,但是现在我需要进行一些条件样式设置-基于将单元格着色为某种颜色的值。

我已经查看并尝试实现ContentControlBindingExtensions sample

但是我一直收到错误消息,说在类加载器中找不到XsltCustomFinisher。

我的代码:

private static void bindXMLToTemplateFinisher(WordprocessingMLPackage wordMLPackage, String xml) throws Docx4JException, SAXException, IOException {

    XPathFactoryUtil.setxPathFactory(new net.sf.saxon.xpath.XPathFactoryImpl());

    Document xmlDoc = convertStringToXMLDocument(xml);
    //ClassLoader classloader = Thread.currentThread().getContextClassLoader();
    //String url = classloader.getResource("XsltFinishers/XsltFinisherCustom.xslt").getPath();

    Docx4jProperties.setProperty("docx4j.model.datastorage.XsltFinisher.xslt", "XsltFinisherReport.xslt");

    Docx4J.bind(wordMLPackage, xmlDoc, Docx4J.FLAG_BIND_INSERT_XML | Docx4J.FLAG_BIND_BIND_XML, null, new XsltProviderImpl(), "XsltFinisherReport.xslt", null);

}


我希望能够设置一个xsltfinisher文件,但似乎无法找到我要使用的文件。

对于理解如何在docx4j中设置和使用自定义xslt整理程序的任何帮助,将不胜感激。

最佳答案

首先,将XsltFinisherReport.xslt放在您的类路径上,如它所说?在您的IDE中,这可能意味着将包含它的目录添加到您的类路径中。

您可以打开org.docx4j.utils.ResourceUtils的日志记录以进行更多诊断。

根据XsltFinisher中的文档:

 * As an optional step after binding, apply user-defined XSLT to transform
 * this content control.
 *
 * A template is attached to a content control (a repeat/condition/or normal bind),
 * using tag od:call=XYZ where XYZ is the template to call.
 *
 * For example, by placing this on a repeat, a table tow could be coloured red if
 * its contents met some condition.


例如xslt,请参见https://github.com/plutext/docx4j/tree/master/docx4j-samples-resources/src/main/resources

10-08 13:31