admin
2021-09-24 881f273bca0f94345efb2c0cac52279af4a7f4e4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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;
    }
 
 
}