package org.yeshi.utils;
|
|
import freemarker.cache.StringTemplateLoader;
|
import freemarker.template.Configuration;
|
import freemarker.template.Template;
|
import org.apache.commons.io.IOUtils;
|
|
import java.io.*;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
public class FreemarkerUtils {
|
|
private static String defaultCharacter = "UTF-8";
|
private static Configuration cfg;
|
|
private FreemarkerUtils() {
|
}
|
|
static {
|
cfg = new Configuration(Configuration.getVersion());
|
cfg.setDefaultEncoding(defaultCharacter);
|
cfg.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);
|
}
|
|
/**
|
* 对模板进行渲染
|
*
|
* @param data 数据Map
|
* @param tplStr 模板
|
* @return
|
*/
|
public static String generateString(Object data, String tplStr) {
|
String result = null;
|
String name = "myStrTpl";
|
try {
|
StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
|
stringTemplateLoader.putTemplate(name, tplStr);
|
cfg.setTemplateLoader(stringTemplateLoader);
|
Template template = cfg.getTemplate(name, defaultCharacter);
|
StringWriter out = new StringWriter();
|
template.process(data, out);
|
out.flush();
|
result = out.toString();
|
out.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
|
public static String generateInputStream(Object data, InputStream templateStream) throws IOException {
|
String str = IOUtils.toString(templateStream, "UTF-8");
|
return generateString(data, str);
|
}
|
|
|
public static String generateInputStream(Object data, String name, Map<String, InputStream> templateStreams) throws IOException {
|
String result = null;
|
try {
|
StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
|
for (Iterator<String> its = templateStreams.keySet().iterator(); its.hasNext(); ) {
|
String key = its.next();
|
stringTemplateLoader.putTemplate(key, IOUtils.toString(templateStreams.get(key), "UTF-8"));
|
}
|
cfg.setTemplateLoader(stringTemplateLoader);
|
Template template = cfg.getTemplate(name, defaultCharacter);
|
StringWriter out = new StringWriter();
|
template.process(data, out);
|
out.flush();
|
result = out.toString();
|
out.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
|
/**
|
* 将模板渲染以后保存到文件
|
*
|
* @param templateFileDir 模板目录
|
* @param templateFileName 模板文件名称
|
* @param targetFilePath 渲染后文件名称
|
* @param data 数据
|
* @return
|
*/
|
public static boolean renderingTemplateAndGenerateFile(String templateFileDir,
|
String templateFileName, String targetFilePath, Object data) {
|
boolean flag = true;
|
try {
|
// 设置文件所在目录的路径
|
cfg.setDirectoryForTemplateLoading(new File(templateFileDir));//模板路径
|
// 获取模版
|
Template template = cfg.getTemplate(templateFileName);
|
// 设置输出文件名,和保存路径
|
File outFile = new File(targetFilePath);
|
// 将模板和数据模型合并生成文件 重点设置编码集
|
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
|
// 生成文件
|
template.process(data, out);
|
// 关闭流
|
out.flush();
|
out.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
// logger.error("生产模板文件失败!",e);
|
flag = false;
|
}
|
return flag;
|
}
|
|
public static boolean renderingTemplateAndGenerateFile(InputStream templateInput, String targetFilePath, Object data) throws Exception {
|
String result = generateInputStream(data, templateInput);
|
if (result != null) {
|
FileUtil.saveAsFileByte(result.getBytes("UTF-8"), targetFilePath);
|
return true;
|
}
|
return false;
|
}
|
|
|
}
|