最近做了个小项目,需要在线生成起诉状且带格式。做了个小工具分享给大家,也借鉴了网络上的东西,废话不多说,上干货
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 plaintiffList = new ArrayList();
List accusedManList = new ArrayList();
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 getMap4Json(String jsonString) {
JSONObject jsonObject = JSONObject.parseObject(jsonString);
Iterator keyIter = jsonObject.keySet().iterator();
String key;
Object value;
Map valueMap = new HashMap();
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对象
* JSON数据中键的名称必须和对应JAVA对象中bean字段的名称一致
* @param java对象值
* @param jsonString JSON 对象字符
* @param cls 对象class *
* @return 返回java对象
*/
public static T getJsonToObject(String jsonString, Class cls) {
return JSONObject.parseObject(jsonString,cls);
}
/**
* 从json对象集合表达式中得到一个java对象集合
* JSON数据中键的名称必须和对应JAVA对象中bean字段的名称一致
*
* @param 对象值
* @param jsonString json字符串
* @param cls JAVA Bean对象
* @return JAVA bean对象集合list
*/
public static List queryJsonToList(String jsonString,Class cls) {
List list = JSONArray.parseArray(jsonString,cls);
return list;
}
}
还有一个ftl的模板文件,可以自己写个,也可以找我要