社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
请叫我小C2016-01-12 11:58:51
利用java通过freemarker模板文件生成带格式的word文档
最近做了个小项目,需要在线生成起诉状且带格式。做了个小工具分享给大家,也借鉴了网络上的东西,废话不多说,上干货
1.把需要生成固定格式的文件保存为word文档(图1)
2.把word另存为xml格式,并且格式化,好修改里面的东西
3.修改好后保存,格式改为ftl模板
下面代码:
public final static String createWord(HttpServletResponse response,Map dataMap, String templateName, String fileName) {
String result = "系统提示:Word文件导出成功!";
try {
OutputStream os = response.getOutputStream();
//设置头部文件生成格式为微软word
response.reset();
response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GB2312"), "ISO8859-1"));
response.setContentType("application/msword");
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
configuration.setClassForTemplateLoading(WordUtil.class, "/");//这里是指放在classes下
// 获取模板
Template template = configuration.getTemplate(templateName);
// 将模板和数据模型合并生成文件
Writer out = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
template.process(dataMap, out);
// 关闭流
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void main(String[] args) throws IOException, TemplateException {
String s = "{"plaintiff": [{ "pUserName": "张三", "pUserSex": "男", "pAgeIcard": "44","pNation": "汉族","pAddress": "江苏"},{"pUserName": "得到","pUserSex": "男","pAgeIcard": "54","pNation": "汉族","pAddress": "湖南"}],"
+ ""accusedMan": [{ "accusedManName": "张三", "accusedManAddress": "男", "accusedManPeson": "张三","accusedManJob": "班长"}],"signData":{"courtName":"北京","copyNumber":"1","suitor":"张三"},"lawsuitReest":"ddd","reasonsContent":"dfdf"}";
Map dataMap = new HashMap();
Map complaintMap = JsonUtil.getJsonToObject(s, Map.class);
List<Map> plaintiffList = new ArrayList<Map>();
List<Map> accusedManList = new ArrayList<Map>();
for (Object key : complaintMap.keySet()) {
Object contentJson = complaintMap.get(key);
if (key.equals("plaintiff")) {
plaintiffList.addAll(JsonUtil.queryJsonToList(contentJson.toString(), Map.class));
} else if (key.equals("accusedman")) {
accusedManList.addAll(JsonUtil.queryJsonToList(contentJson.toString(), Map.class));
} else {
dataMap.put(key, contentJson);
}
}
dataMap.put("plaintiff", plaintiffList);
dataMap.put("accusedman", accusedManList);
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
configuration.setClassForTemplateLoading(WordUtil.class, "/");
// 获取模板
Template template = configuration.getTemplate("qsz.ftl");
// 输出文件
File outFile = new File("d:/" + File.separator + "cc.doc");
// 如果输出目标文件夹不存在,则创建
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();
}
public class JsonUtil {
/**
* 从一个JSON 对象字符格式中得到一个java对象
*
* @param jsonString JSON 对象字符
* @param pojoCalss 对象class *
* @return 返回java对象
*/
public static Object getObject4JsonString(String jsonString, Class<?> pojoCalss) {
Object pojo;
JSONObject jsonObject = JSONObject.parseObject(jsonString);
pojo = JSONObject.toJavaObject(jsonObject, pojoCalss);
return pojo;
}
/**
* 从json HASH表达式中获取一个map,改map支持嵌套功能
*
* @param jsonString json HASH表达式
* @return 返回map数组
*/
public static Map<String,Object> getMap4Json(String jsonString) {
JSONObject jsonObject = JSONObject.parseObject(jsonString);
Iterator<String> keyIter = jsonObject.keySet().iterator();
String key;
Object value;
Map<String,Object> valueMap = new HashMap<String,Object>();
while (keyIter.hasNext()) {
key = (String) keyIter.next();
value = jsonObject.get(key);
valueMap.put(key, value);
}
return valueMap;
}
/**
* 从json数组中得到相应java数组
*
* @param jsonString json字符串
* @return 返回java数组
*/
public static Object[] getObjectArray4Json(String jsonString) {
JSONArray jsonArray = JSONArray.parseArray(jsonString);
return jsonArray.toArray();
}
/**
* 将一个对象转换为JSON字符串
* @param obj 对象
* @return 返回json字符串
*/
public static String getObjectToJsonObject(Object obj){
return JSON.toJSON(obj).toString();
}
/**
* 从json数组中解析出java字符串数组
*
* @param jsonString json字符串
* @return 返回java字符串数字
*/
public static String[] getStringArray4Json(String jsonString) {
JSONArray jsonArray = JSONArray.parseArray(jsonString);
String[] stringArray = new String[jsonArray.size()];
for (int i = 0; i < jsonArray.size(); i++) {
stringArray[i] = jsonArray.get(i).toString();
}
return stringArray;
}
/**
* 将一个JSON数据转换为对应的JAVA对象</br>
* JSON数据中键的名称必须和对应JAVA对象中bean字段的名称一致</br>
* @param <T> java对象值
* @param jsonString JSON 对象字符
* @param cls 对象class *
* @return 返回java对象
*/
public static <T> T getJsonToObject(String jsonString, Class<T> cls) {
return JSONObject.parseObject(jsonString,cls);
}
/**
* 从json对象集合表达式中得到一个java对象集合</br>
* JSON数据中键的名称必须和对应JAVA对象中bean字段的名称一致</br>
*
* @param <T> 对象值
* @param jsonString json字符串
* @param cls JAVA Bean对象
* @return JAVA bean对象集合list
*/
public static <T> List<T> queryJsonToList(String jsonString,Class<T> cls) {
List<T> list = JSONArray.parseArray(jsonString,cls);
return list;
}
}
还有一个ftl的模板文件,可以自己写个,也可以找我要
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!