处理思路:
- 将word模板以xml格式另存一份,得到xml格式模板
- 在xml 文件中,使用freemark标签,替换一些自定义值
- 使用freemark 解析xml ,输出到.doc 文件
- 在处理的时候要把文件后缀改成.ftl格式
- 获得自定义内容的word文件
案列资源:
https://download.csdn.net/download/csdn_heliu/10881778
实际操作:
word模板:
另存为xml文件,修改后缀名为.ftl格式(ftl文件是使用freemark标签处理过的,已经替换自定义内容,用idea或者eclipse处理太卡了,在外面用编辑器处理的)
实际代码实现:
public static void main(String[] args) { //定义一个集合存放的是学生信息 List<Student> studentList = new ArrayList<>(); //学生A Student a = new Student(); a.setName("学生A"); a.setSex("男"); a.setAge(18); a.setPhone("18856652121"); a.setAddress("安徽省合肥市"); studentList.add(a); //学生B Student b = new Student(); b.setName("学生B"); b.setSex("女"); b.setAge(80); b.setPhone("18856654444"); b.setAddress("美国加州"); studentList.add(b); //学生C Student c = new Student(); c.setName("学生C"); c.setSex("女"); c.setAge(19); c.setPhone("18856652121"); c.setAddress("江苏浙江"); studentList.add(c); //把学生信息放到map里 Map<String, Object> params = new HashMap<>(); params.put("studentList", studentList); //标题 params.put("title", "高三(3)班"); logger.info("params:{}", params); //生成自定义内容word String resultFilePath = String.format("D:/edu/test_%s.doc", "高三(3)班"); FreeMakerParser.process("templates/test.ftl", resultFilePath, params); }
解析xml输出到.doc文件中—生成word文档时使用的方法:
/** * @Description 解析xml输出到.doc文件中—生成word文档时使用 * @author HeLiu * @date 2018/12/27 17:07 */ public static String process(String templateFilePath, String resultFilePath, Map param) { CONFIGURER.setDefaultEncoding("UTF-8");// 设置默认编码方式 try { InputStream is = FreeMakerParser.class.getClassLoader().getResourceAsStream(templateFilePath); if (null == is) { logger.info(".............InputStream is null.........."); } File targetFile = F