java - 尝试使用 docx4j 扩展控件绑定和设置自定义 xsltfinisher 时出现问题
问题描述
我正在尝试使用 docx4j 生成报告。我已经设法创建了一个 word 模板并根据我的数据创建了 xml 绑定。
我可以使用 docx4j 生成基于此的 docx 输出,但现在我需要做一些条件样式 - 基于值将单元格着色为某种颜色。
我已经查看并尝试实现ContentControlBindingExtensions 示例。
但我不断收到错误消息,提示无法在类加载器中找到 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
推荐阅读
- mysql - 尝试将 csv 文件加载到我的数据库上的表中时,Mac Os Catalina 版本 10.15.2 上的 MySQL Workbench 错误 1290
- c# - 仅使用一个给定用户的管理员获取项目
- asp.net - 如何将 ViewBag 从控制器发送到特定的不同视图
- javascript - React useState - 文件阅读器未更新
- python - 无法重命名数据框的列
- typescript - 允许额外属性的 StrictUnion
- sql - 使用 sub_date 动态从 hive 表中删除分区
- azure - 在 Azure 培训中使用 Concierge 订阅/沙盒时无法打开 Cloud Shell
- node.js - Survey Monkey API 节点服务器 GET 请求返回未经授权的 401 错误
- react-native - 将 react-native 升级到 59.0 后,使用 Animated.View 的动画无法在 iOS 上运行