4、docx4j中模板的使用
docx4jadmin 发布于:2018-10-14 12:43:29
阅读:loading
关于模板的实现是日常开发中最常用到的,也是最易于维护的一种功能实现,利用模板可以非常高效的去实现文档内容的布局显示级相关属性的设置,同时利用docx文件作为模板也非常方便的进行二次修改和变更,它的好处不再赘述。
通过运行一列示例发现docx4j的关于模板的实现至少有3-4中方式,模板有常用的jxel表达式的写法、Word自带书签的写法、《》中文括号包裹的写法、Word中开发工具-设计模式实现的写法等等,既然能够读取到文档中的各种内容,自己想如何解析都是可以的,本文(和后文中)均采用类似jxel表达式引擎的方式去深入实现。
给出两种案例去实现基于模板中的变量替换cao作,采用docx4j提供的变量替换的方式,分别是“请假条”和“收入证明”两种单纯变量替换的实现,这两个模板示例中只包括了纯变量替换和含有图片,至于模板中有表格或者动态图片后文会实现。
关于“请假条”案例的模板文件参考为:
上述含有多个变量的替换,参考代码实现为:
package cn.chendd.docx4j.examples;
import java.io.File;
import java.util.HashMap;
import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
/**
* 收入证明模板示例
*/
public class IncomeTemplateTest {
public static void main(String[] args) throws Exception {
String templatePath = System.getProperty("user.dir") + "/template/收入证明_template.docx";
String outPath = System.getProperty("user.dir") + "/template/out/收入证明.docx";
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(templatePath));
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
HashMap<String, String> mappings = new HashMap<String, String>();
mappings.put("name", "马参军");
mappings.put("years", "5");
mappings.put("post", "攻城狮");
mappings.put("money", "25,000.00");
mappings.put("moneyChinese", "二万五年里");
mappings.put("address", "天宫一号天宫一号天宫一号天宫一号");
mappings.put("telephone", "188188188188");
mappings.put("year", "2018");
mappings.put("month", "09");
mappings.put("date", "11");
documentPart.variableReplace(mappings);
Docx4J.save(wordMLPackage, new File(outPath));
}
}
代码运行效果图参考为:
关于“收入证明”案例的模板文件参考为:
其实这个案例跟上述一样,只不过以前工作中涉及到的Word报表曾经涉及到有盖章的实现,就特地想到收入证明这种单据,是需要企业盖公章的,也就是比上述的工资条的案例多了一个盖章的图片而已,别的不涉及,我想代码你们就不用看了,有请假条的可供参考,没有写不出来的吧。
上述案例中相关文件下载
点赞