java占位符填充_Java使用freemark生成word
1、制作模板
先用office word做一个模板word文档,${usrName}、${nowDate}占位符
可以使用 office 或者 wps 先创建一个模板表格 (替换$部分可以在 模板格式改变之后 在替换xml 格式改了后有些原本的字符会分开)
2、用office word将模板word另存为xml
3、将xml文件的后缀改为.ftl
4、编辑.ftl文件
a、用${string}替换需要动态生成的数据,这一步在制作模板的时候就已经编写好了,这里不需要再编辑,需要主意的是在装换成xml文件的时候,占位符可能会被分成多个,如上面的${userName}可能会被分开成${userNam和e},这时需要把e}合到${userNam标签里面,并删除掉e}相关的标签。 也可以在这里进行替换 这样不用管分开的部分 b、表格循环用标签<#list table1 as object> (类似for (String[] object: table1 ){})
首先介绍几个标签,表格标签类似HTML的
,类似HTML的。每一个单元格,下面以表1为例子:
通过关键搜索找到表1的,在会有一些子标签,定义表格的一些格式,每一列的长度,我们不需要去修改标签的任何内容和格式,因为在制作模板的时候,已经设计好了。
的子标签还有,表示每一行的数据,所要做的是找到第二个(第一个是表格标题,固定的,不需要循环),然后删除掉第二个后面的,接下来将第二个包裹在循环标签<#list table1 as object> 内就行。
再接下来取出数据填充。依次找到、、、、(由于设计模板的时候,第四列里面的数据为空的,生成XML的时候是没有和,需要自己添加,建议设计模板的时候不要留空数据,避免这种情况出现),填充1(广州 || 37390379等)里面的数据,即将1改为${object[0]},object数组对象(<#list table1 as object> 中的object),0下标,很容易理解。
依照次方法修改其他的表格标签,至此模板已写完,接下来是编程部分。
package test.word;import java.awt.Desktop;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import freemarker.template.Configuration;
import freemarker.template.Template;public class Test {/*** 获取数据* @return* @throws Exception*/private static Map<String, Object> getData() throws Exception {Map<String, Object> map = new HashMap<String, Object>();map.put("userName", "admin");//对应模板中的${userName}map.put("nowDate", new Date().toString());//对应模板中的${nowDate}List<String[]> tablt1 = new ArrayList<String[]>();tablt1.add(new String[]{"1","广州","838973","--"});tablt1.add(new String[]{"2","佛山","115542","--"});tablt1.add(new String[]{"3","合计","955845","--"});map.put("table1", tablt1);//<#list table1 as object></#list>//其他数据return map;}public static void main(String[] args) throws Exception {createWord(getData(), "test.ftl", "F:/test/", "test"+System.currentTimeMillis()+".doc");}/*** * @param dataMap 数据* @param templateName 模板名称* @param filePath 保存文件路劲* @param fileName 保存文件名*/public static void createWord(Map<?, ?> dataMap, String templateName,String filePath, String fileName) {try {Configuration configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");// ftl模板文件统一放至 test.ftl包下面configuration.setClassForTemplateLoading(Test.class, "/test/word/");// 获取模板Template template = configuration.getTemplate(templateName);File outFile = new File(filePath + File.separator + fileName);if (!outFile.getParentFile().exists()) {outFile.getParentFile().mkdirs();}// 将模板和数据模型合并生成文件Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));// 生成文件template.process(dataMap, out);out.flush();out.close();Desktop desktop = Desktop.getDesktop();desktop.open(new File(filePath + File.separator + fileName));} catch (Exception e) {e.printStackTrace();}}
}
resultmap 存入需要遍历到表格上去的数据 使用这个类里面的方法 传入参数配置好模板即可在浏览器页面实现 word导出功能
java占位符填充_Java使用freemark生成word相关推荐
- java占位符填充_Java占位符
一.背景 在使用java开发的过程中,经常需要使用将字符串拼接到一起(比如,用于日志输出),常用方法如下: 使用+将不同字符串进行拼接 使用StringBuilder 使用String.format ...
- java占位符打印_java简单日志打印规范小记
个人认为,如果公司一些基础类库不做约束,很可能"埋坑",形成技术债务,最终为此付出代价.本文讲解一个最基本的日志打印规范. 1. 日志打印组件 日志组件有很多,日志门面的选择有:S ...
- java占位符填充_程序员:深入理解Java虚拟机,对象的内存布局
在 HotSpot 虚拟机中,对象在内存中存储的布局分为 3 块区域:对象头 ( Header ) .实例数据 ( InstanceData ) 和对齐填充 (Padding) . 一.对象的内存布局 ...
- java占位符填充_实现java中的占位符
学习过.net MVC 的同学,都知道其中用一个文件share /_Layout.cshtml,它主要实现的是一个类似母版页(可以参照word的母版)的功能,那么在javaee中是否有类似的功能呢?其 ...
- java 占位符写法_java中占位符
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. form ...
- Java 占位符 例子 - 消息模板
例子1: import java.text.SimpleDateFormat; import java.util.Date;import org.slf4j.Logger; import org.sl ...
- freemark生成word换行
使用freemark生成word的时候,文本里的制表符会被自动解析为空格,要想实现换行效果的话可以使用<w:br/>标签
- java占位符打印_什么是 Java 构造器?
构造器是编程的强大组件.使用它们来释放 Java 的全部潜力. -- Seth Kenlon(作者) 在开源.跨平台编程领域,Java 无疑(?)是无可争议的重量级语言.尽管有许多 伟大的跨平台 框架 ...
- Java占位符替换工具类
import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFact ...
最新文章
- SpiderData 2019年2月27日 DApp数据排行榜
- jQuery lazyload插件详解和问题解答
- ddr布线 pads_DDR SDRAM布线规则
- WP7游戏开发:TweeJump(cocos2d-xna)
- python爬微信头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法
- DB中字段为null,为空,为空字符串,为空格要怎么过滤取出有效值
- Linux命令总结:file
- Spring REST实践之HATEOAS
- .ajax 上传图片,ajax图片上传并预览
- 创建一个MDK工程模板
- 负载均衡算法详解与实践
- 10 个超棒的 jQuery 视频插件
- cuda 各个版本下载
- 开源首发!Android入门“神器“——《Android编程入门教程》,理论与实战齐飞!
- 汽车can总线协议c语言,CAN总线自定义协议使用说明.pdf
- Ubuntu12.04解决集成HD3000显卡安装后系统详情显示图形 驱动 未知的方法
- 电梯管理php,楼道电梯管理的几种方式
- java毕业设计仓库管理系统Mybatis+系统+数据库+调试部署
- 狄利克雷原理及其应用
- 苏州大学计算机专业课872考研真题1999~2022含答案解析大纲专业课PPT 百度网盘分享 黄金典藏版
热门文章
- 变频器输出功率_100米的深井泵,如何接变频器,怎样控制
- 上证指数30年k线图_技术预判2020:上证指数要突破3500点才会“井喷”
- C语言灵魂——算法!
- hdu Caocao's Bridges(无向图边双连通分量,找出权值最小的桥)
- java中同步嵌套引起的死锁事例代码
- java的栈图形演示
- java post get 请求_java get post 请求
- hystrix 全局熔断_跟我学Spring Cloud(Finchley版)14Feign使用Hystrix
- php面向对象编程代码怎么写,php面向对象编程(一)
- 字符串固定长度 易语言_易语言字符串操作源码