博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Freemarker生成Word
阅读量:6857 次
发布时间:2019-06-26

本文共 1906 字,大约阅读时间需要 6 分钟。

hot3.png

场景:
需要通过模板动态生成word,模板中包括普通字符串和表格
实现方法:
需要:Freemarker 

1、将word模板另存为xml格式,将需要替换的地方使用标签和指令替换,具体参照Freemarker开发手册

(1)普通字符串替换为${stringdemo}

(2)表格替换

<#list rows as row>

......
<#list row as item>
....${item}..
</#list>
......
</#list>

2、将修改后的xml模板文件后缀名改为.ftl

3、实例程序

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.HashMap;import java.util.List;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;public class DemoFreemarker {	public static void main(String[] args) {		creatWord();	}		@SuppressWarnings("unchecked")	public static void creatWord() {		try {			//创建配置实例			Configuration cfg = new Configuration();			cfg.setDefaultEncoding("utf-8");			cfg.setDirectoryForTemplateLoading(new File("C://wtt"));			cfg.setObjectWrapper(new DefaultObjectWrapper());			//获取模板			Template temp = cfg.getTemplate("demo.ftl");			temp.setEncoding("utf-8");						//创建数据模型			Map root = new HashMap();			root.put("stringdemo", "字符串测试");			List rows = new ArrayList();			for (int j=1; j<5; j++) {				List row = new ArrayList();				for (int i=1; i<16; i++) {					row.add(j+""+i);				}				rows.add(row);			}			root.put("rows", rows);						//将模板和数据模型合并生成文件			File docFile = new File("C://wtt/demo.doc");			Writer docout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));			temp.process(root, docout);					} catch (Exception e) {			e.printStackTrace();		}	}}

注:

1、支持word版本为2003及更高版本

2、此种方法优点是跨平台,并且不依赖MS office word

3、如果生成的文件不能打开,用文本编辑器打开生成的word

(1)如果开始为 ?<?xml version="1.0" ,即开头多出个问号,因为ftl模板文件格式有问题,需要将格式设置为“UTF-8无BOM”格式,可使用Notepad++文本编辑器设置

(2)如果生成的word格式为ANSI,则将ftl模板第一行声明编码改为gbk,如:<?xml version="1.0" encoding="gbk" standalone="yes"?>

转载于:https://my.oschina.net/liweigov/blog/63868

你可能感兴趣的文章
DWR+S2SH
查看>>
ESXi 5.0启动relocating modules and starting up the kernel解决
查看>>
Android 第一次运行程序提示框操作
查看>>
学历与经验
查看>>
.mui-bar-nav~.mui-content这两个class之间的~什么意思?
查看>>
Apache Shiro简单示例
查看>>
jxl.jar实现对单元格格式的设置及常用操作
查看>>
SHELL笔记2
查看>>
JQuery 源码解析资料
查看>>
安装saltstack
查看>>
Java之类的封装,继承,多态
查看>>
关于css文本超过部分显示省略号
查看>>
win 7 完美安装 VC++6.0加番茄插件和行号
查看>>
http://jeffyyko.blog.51cto.com
查看>>
「造个轮子」——设计 HTTP 请求全局上下文
查看>>
我的友情链接
查看>>
Hadoop 2.X -- YARN
查看>>
组件的生命周期
查看>>
Linux基础命令
查看>>
基于单片机的嵌入式SNMP代理器设计与实现
查看>>