我正在尝试使用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