package cn.zoshu.common.utils.freemaker;

import cn.zoshu.common.utils.DateUtils;
import cn.zoshu.common.utils.TimestampHelper;
import cn.zoshu.framework.config.RuoYiConfig;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/*
* @Description: 导出文档工具类
* @Author: Chris.Ren
* @Date: 2020-05-29
*/
public class FreemakerUtils
{
	static String path= RuoYiConfig.getUploadPath()+"/";


	/*
	* @Description: 导出文档
	* @Param: map:包含模板中的字段和模板名wordName,导出文档名exportWordName
	* @returns: String
	* @Author: Chris.Ren
	* @Date: 2020-05-29
	*/
	public static String exportWord(Map<String,Object> params) {
		try {
			//Configuration 用于读取ftl文件
			Configuration configuration = new Configuration(new Version("2.3.30"));
			configuration.setDefaultEncoding("utf-8");

      /** 以下是两种指定ftl文件所在目录路径的方式,注意这两种方式都是 指定ftl文件所在目录的路径,而不是ftl文件的路径 */
      // 指定路径的第一种方式(根据某个类的相对路径指定)
      // configuration.setClassForTemplateLoading(this.getClass(), "");

      // 指定路径的第二种方式,我的路径是C:/a.ftl
			System.out.println("导出地址"+path+"model/"+String.valueOf(params.get("wordName")));
//      path = "D:/safetyCheck/uploadPath/upload/";
			configuration.setDirectoryForTemplateLoading(new File(path+"model/"));

			//输出文档路径及名称
			//利用uuid生成随机文件名,防止重复
//			String filename=path+params.get("exportWordName")+"-"+UUID.randomUUID()+".doc";
			String filename=path+params.get("exportWordName")+"-"+ DateUtils.dateTimeNow() +".doc";
			File outFile = new File(filename);

			//以utf-8的编码读取ftl文件
			Template template = configuration.getTemplate(String.valueOf(params.get("wordName")), "utf-8");
			Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
			template.process(params, out);
			out.close();
			//返回文件路径
			return filename;
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}

	/*
	 * @Description: 导出excel
	 * @Param: map:包含模板中的字段和模板名wordName,导出文档名exportWordName
	 * @returns: String
	 * @Author: Chris.Ren
	 * @Date: 2020-05-29
	 */
	public static String exportExecl(Map<String,Object> params) {
		try {
			//Configuration 用于读取ftl文件
			Configuration configuration = new Configuration(new Version("2.3.30"));
			configuration.setDefaultEncoding("utf-8");

			/** 以下是两种指定ftl文件所在目录路径的方式,注意这两种方式都是 指定ftl文件所在目录的路径,而不是ftl文件的路径 */
			// 指定路径的第一种方式(根据某个类的相对路径指定)
			// configuration.setClassForTemplateLoading(this.getClass(), "");

			// 指定路径的第二种方式,我的路径是C:/a.ftl
//			path = "D:/safetyCheck/uploadPath/upload/";
			System.out.println("导出地址"+path+"model/"+String.valueOf(params.get("wordName")));
			configuration.setDirectoryForTemplateLoading(new File(path+"model/"));

			//输出文档路径及名称
			//利用uuid生成随机文件名,防止重复
//			String filename=path+params.get("exportWordName")+"-"+UUID.randomUUID()+".doc";
			String filename=path+params.get("exportWordName")+"-"+ DateUtils.dateTimeNow() +".xlsx";
			File outFile = new File(filename);

			//以utf-8的编码读取ftl文件
			Template template = configuration.getTemplate(String.valueOf(params.get("wordName")), "utf-8");
			Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
			template.process(params, out);
			out.close();
			//返回文件路径
			return filename;
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
	}
}

参数params的使用

				Map<String,Object> map = Maps.newHashMap();
				map.put("list", list);
				map.put("exportWordName", "高风险问题统计表");
				map.put("wordName", Constants.HEIGHT_WORK_ALLOW);
				String path = FreemakerUtils.exportWord(map);
Logo

快速构建 Web 应用程序

更多推荐