Java实现freemarker生成word模板
来源:互联网 发布:房贷利率上调 知乎 编辑:程序博客网 时间:2024/05/22 13:26
博主在做的是将word源文件中的内容读取出来,然后按照固定的格式输出,当然,源文件有大量,所以编写了程序来批量自动生成目标文件。
本文要介绍的就是如何生成模板,并将从源文件截取的内容填充到模板文件(即生成目标文件)的过程,读取源文件内容的方法请阅读博主另一篇文章《Java实现poi方式读取word文件内容》。
1.准备工作
jar包----------freemarker.jar,网上都可以下载,找不到的朋友可以联系我。
word模板文件,博主准备的模板如下图:
2.制作模板
2.1在需要自动填充文字的位置,做变量标记(${变量名},如${name})。
博主测试所做的标记如下图,为省事年月日就不填了,举例即可。
2.2将文档以xml格式保存,word另存为,有保存为xml格式的,我就不截图了。
2.3将刚才的xml扩展名更改为ftl,比如“test.xml”更改为“test.ftl”。
2.4用编辑器打开.ftl文件,博主用的是Dreamweaver,打开里面乱七八糟一堆。。此时不要急,百度搜索“xml文件格式化”,利用在线工具即可,选中.ftl中所有内容,将内容格式化后,再复制到编辑器新建的文件中,注意原来的文件不要关闭,格式化内容只是为了方便检查内容是否有错误。
那么我们要检查什么呢?看下图:
我们在模板文件中编辑的变量名称,被错误地分开了,这种情况下,将源文件(就是乱七八糟一堆的那个文件)里面,我上图中标蓝的部分删除,让变量名称正常,检查完所有的变量名称无误后保存文件,模板文件到此就制作完成了。
3.将内容填充到模板中
3.1.Map集合
public Map<String, String> StringtoMap(String buffer){Map<String,String> dataMap = new HashMap<>();dataMap.put("shName", "新一");dataMap.put("class", "二(3)");dataMap.put("group", "3");dataMap.put("name", "王小二");return dataMap; }请务必保证集合中的key键与模板中设置的变量名称一致,如shName与${shName}中的名称一致。
3.2.源代码
package com.freemarker.test;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.HashMap;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;import freemarker.template.TemplateExceptionHandler;public class testFreemarker {private Configuration configure = null;public testFreemarker(){configure = new Configuration();configure.setDefaultEncoding("utf-8");}/** * 根据Doc模板生成word文件 * @param dataMap Map 需要填入模板的数据 * @param fileName 模板文件名称 如test.ftl * @param savePath 保存路径 */ public void createDoc(Map<String, String> dataMap, String fileName, String savePath){ try{ //加载需要装填的模板 Template template = null; //加载模板文件 configure.setClassForTemplateLoading(this.getClass(),"/"); //将模板文件直接复制到src目录下 // configure.setDirectoryForTemplateLoading(new File("D:\\"));//模板文件在本地硬盘d //设置对象包装器 configure.setObjectWrapper(new DefaultObjectWrapper()); //设置异常处理器 configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER); //定义Template对象,注意模板类型名字与downloadType要一致 template= configure.getTemplate(fileName); //文件名调用的时候可更换 //输出文档 File outFile = new File(savePath); Writer out = null; out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8")); template.process(dataMap,out); //outFile.delete(); if(out != null){ out.close(); } }catch (Exception e) { e.printStackTrace(); } } public Map<String, String> StringtoMap(){Map<String,String> dataMap = new HashMap<>();dataMap.put("shName", "新一");dataMap.put("class", "二(3)");dataMap.put("group", "3");dataMap.put("name", "王小二");return dataMap; }public static void main(String[] args) {// TODO Auto-generated method stubMap<String,String> dataMap = new HashMap<>();testFreemarker tf = new testFreemarker();dataMap = tf.StringtoMap();tf.createDoc(dataMap, "test.ftl", "D:\\Object.doc");}}3.3打开D盘根目录下的Object.doc,效果如下:
至此,生成目标文件完成。如果想要下划线长度不变并且自动在下划线上填充内容的话,将下划线用制表符的方式生成就可以了。
本文属于原创内容,资源来源于网络,如有雷同,情有可原,博主很诚实。如果帮了你的忙,请给博主点个赞,觉得废柴,留言提意见,谢谢大家阅读。博主联系方式在“写给读者的话”分类中,欢迎联系,共同进步。
- 【java】模板freemarker实现word生成导出
- Java实现freemarker生成word模板
- java 使用freemarker 生成word模板
- java使用 freemarker 模板生成word文件
- java freemarker模板 实现word文件导出
- freemarker模板生成word文件
- Java Freemarker生成word
- 在java 用xml模板通过freemarker生成word文档
- java实现word套打(关于Freemarker生成word的使用(java生成word))
- java 使用freemarker生成word
- java 生成word应用freemarker
- Java使用freeMarker生成Word
- freemarker根据模板生成word文档,换行
- freemarker根据模板生成word步骤优化
- freemarker的Word模板生成方法
- freemarker+poi 模板生成 word添加图片
- Java 生成word模板
- Java使用freemarker导出word模板
- swiper兼容IE
- 利用百度地图通过位置名称查询经纬度方法总结
- Java语言基础{Java_se(01)}-搭建Java开发环境-环境变量(环境配置)-Java的基本语法-Java的三大注释-关键字和保留字-Java中的语言分隔符
- 常用的mysql操作语句
- 记一次利用Wireshark玩转骗子(任意qq好友IP精准定位)
- Java实现freemarker生成word模板
- Docker资源管理探秘:Docker背后的内核Cgroups机制
- 多线程---threadLocal
- C++的string
- 【面试题】剑指offer21--求栈里面的最小的数字
- UML统一建模语言
- jvm堆栈
- 自定义qml滑动条Slider
- 计算两个YUV视频序列的PSNR