利用java通过freemarker模板文件生成带格式的word文档 - Go语言中文社区

利用java通过freemarker模板文件生成带格式的word文档


请叫我小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;
	}
	
}

利用java通过freemarker模板文件生成带格式的word文档

 

还有一个ftl的模板文件,可以自己写个,也可以找我要

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_35192741/article/details/86679135
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 17:10:06
  • 阅读 ( 1155 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢