背景
最近我手上有个基因检测项目,采集用户基因分析出相应的基因后,根据用户的基因和选择套餐出具不同的检测报告,报告输出为PDF。之前模板的编写和报告的输出都是由开发人员编写网页完成的,为了让客户能够自己编写报告,不需要我们开发人员将设计好的报告重新用网页写一遍,我想到了再word中嵌入模板引擎,直接在word中进行简单的逻辑判断。现在在市面上找到的开源库都是通过替换变量的方式实现word模板的功能的,我的想法是word把内容样式都做完,我们只需要控制显示哪些内容,替换变量,重复哪些即可。
简介
word-tpl默认使用的模板引擎是Freemarker,也可以自己扩展替换掉默认的模板引擎。
word-tpl支持自定义方法指令,类库会采用SPI方式进行扩展方法的加载,也支持手动添加。
源码地址:https://github.com/xuejike/word-tpl
功能
- 变量替换 (已完成)
- 段落内 if 判断(已完成)
- 段落间 if 判断(已完成)
- 单元格内 if 判断(已完成)
- 段落内的for循环(正在开发)
- 段落间的for循环(正在开发)
- 表格间的for循环(正在开发)
使用效果
word模板内容
输出的结果
使用方式
引入类库
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
implementation 'com.github.xuejike.word-tpl:word-tpl-core:0.1'
}
生成word文档
public class TestMain {
public static void main(String[] args) throws IOException, TplBuildException {
String tplFile = "E:\\project\\word-tpl\\word-tpl\\var-tpl.docx";
String outFile = "E:\\project\\word-tpl\\word-tpl\\var-tpl-out.docx";
HashMap<String, Object> map = new HashMap<>();
map.put("xuejike","薛纪克");
//使用Freemarker模板引擎进行解析
WordTplUtils wordTplUtils = new WordTplUtils(new FreemarkerWordTplFactory());
// 每次构建都会重新生成word-tpl脚本
wordTplUtils.buildWord(new File(tplFile),outFile,map);
// 提前构建脚本,并添加到模板中,以后使用模板名称进行生成word即可,可以避免每次重新构建word脚本
String script = wordTplUtils.buildTplScript(tplFile);
wordTplUtils.addTplScript("test",script);
wordTplUtils.buildWord("test",outFile,map);
}
}