1、FreeMarker需要添加的Maven依赖:
1 <dependency>2 <groupId>org.freemarker</groupId>3 <artifactId>freemarker</artifactId>4 <version>2.3.23</version>5 </dependency>
2、使用模板生成HTML代码
2.1 数据模型
1 public class User { 2 3 private String username; 4 5 private String password; 6 7 private Integer age; 8 9 private String address;10 11 //省略setter和getter方法 12 }
2.2 FreeMarker模板
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用户信息</title> 6 <!-- 新 Bootstrap 核心 CSS 文件 --> 7 <link rel="stylesheet" 8 href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" /> 9 </head>10 <body style="font-family:'Courier New'">11 <h3 class="text-center">这是用户${username}的信息页!</h3>12 <div class="col-md-6 column">13 <table class="table table-bordered">14 <tr>15 <th>用户名</th>16 <th>密码</th>17 <th>年龄</th>18 <th>地址</th>19 </tr>20 <tr>21 <td>${username}</td>22 <td>${password}</td>23 <td>${age}</td>24 <td>${address}</td>25 </tr>26 </table>27 </div>28 </body>29 </html>
2.3 使用FreeMarker生成HTML代码
1 /** 2 * 使用模板生成HTML代码 3 */ 4 public static void createHtmlFromModel() { 5 FileWriter out = null; 6 try { 7 // 通过FreeMarker的Confuguration读取相应的模板文件 8 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); 9 // 设置模板路径10 configuration.setClassForTemplateLoading(CreateHtmlByFreemarker.class, "/static/ftl");11 // 设置默认字体12 configuration.setDefaultEncoding("utf-8");13 14 // 获取模板15 Template template = configuration.getTemplate("user.ftl");16 //设置模型17 User user = new User("tom", "hahahah", 28, "上海市");18 19 //设置输出文件20 File file = new File("e:/html/result.html");21 if(!file.exists()) {22 file.createNewFile();23 }24 //设置输出流25 out = new FileWriter(file);26 //模板输出静态文件27 template.process(user, out);28 } catch (TemplateNotFoundException e) {29 e.printStackTrace();30 } catch (MalformedTemplateNameException e) {31 e.printStackTrace();32 } catch (ParseException e) {33 e.printStackTrace();34 } catch (IOException e) {35 e.printStackTrace();36 } catch (TemplateException e) {37 e.printStackTrace();38 } finally {39 if(null != out) {40 try {41 out.close();42 } catch (IOException e) {43 e.printStackTrace();44 }45 }46 }47 }
3、使用String作为FreeMarker模板,生成HTML代码
3.1 数据模型使用2.1模型
3.2 模板使用2.2模板
3.3 使用FreeMarker生成HTML代码
1 /** 2 * 把模板读入到String中,然后根据String构造FreeMarker模板 3 */ 4 public static void createHtmlFromString() { 5 BufferedInputStream in = null; 6 FileWriter out = null; 7 try { 8 //模板文件 9 File file = new File("D:/EclipseLearnSpace/ResearchSpace/Html2Pdf/src/main/resources/static/html/user.html");10 //构造输入流11 in = new BufferedInputStream(new FileInputStream(file));12 int len;13 byte[] bytes = new byte[1024];14 //模板内容15 StringBuilder content = new StringBuilder();16 while((len = in.read(bytes)) != -1) {17 content.append(new String(bytes, 0, len, "utf-8"));18 }19 20 //构造Configuration21 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);22 //构造StringTemplateLoader23 StringTemplateLoader loader = new StringTemplateLoader();24 //添加String模板25 loader.putTemplate("test", content.toString());26 //把StringTemplateLoader添加到Configuration中27 configuration.setTemplateLoader(loader);28 29 //构造Model30 User user = new User("tom", "kkkkk", 29, "北京山东");31 //获取模板32 Template template = configuration.getTemplate("test");33 //构造输出路34 out = new FileWriter("e:/html/result.html");35 //生成HTML36 template.process(user, out);37 } catch (FileNotFoundException e) {38 e.printStackTrace();39 } catch (UnsupportedEncodingException e) {40 e.printStackTrace();41 } catch (IOException e) {42 e.printStackTrace();43 } catch (TemplateException e) {44 e.printStackTrace();45 } finally {46 if(null != in) {47 try {48 in.close();49 } catch (IOException e) {50 e.printStackTrace();51 }52 }53 if(null != out) {54 try {55 out.close();56 } catch (IOException e) {57 e.printStackTrace();58 }59 }60 }61 62 }
4、使用String模板,模板中使用List
4.1 数据模型
1 public class Classes { 2 3 private String classId; // 班级ID 4 5 private String className; // 班级名称 6 7 private List<User> users; 8 9 public String getClassId() {10 return classId;11 }12 13 //省略settter和getter方法14 15 }
4.2 FreeMarker模板
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>班级信息</title> 6 <!-- 新 Bootstrap 核心 CSS 文件 --> 7 <link rel="stylesheet" 8 href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" /> 9 <style type="text/css">10 .table-align{11 margin-left: 25%;12 }13 </style>14 </head>15 <body style="font-family:'Courier New'">16 17 <h3 class="text-center">下面是班级ID【${classId}】,班级名称【${className}】的人员信息</h3>18 <div class="col-md-6 column table-align">19 <table class="table">20 <tr>21 <th>姓名</th>22 <th>密码</th>23 <th>年龄</th>24 <th>地址</th>25 </tr>26 <!-- FreeMarker使用List循环 -->27 <#list users as user>28 <tr>29 <td>${user.username}</td>30 <td>${user.password}</td>31 <td>${user.age}</td>32 <td>${user.address}</td>33 </tr>34 </#list>35 </table>36 </div>37 </body>38 </html>
4.3 使用FreeMarker生成HTML代码
1 /** 2 * 根据String模板生成HTML,模板中存在List循环 3 */ 4 public static void createHtmlFromStringList() { 5 BufferedInputStream in = null; 6 FileWriter out = null; 7 try { 8 //模板文件 9 File file = new File("D:/EclipseLearnSpace/ResearchSpace/Html2Pdf/src/main/resources/static/html/class.html");10 //构造输入流11 in = new BufferedInputStream(new FileInputStream(file));12 int len;13 byte[] bytes = new byte[1024];14 //模板内容15 StringBuilder content = new StringBuilder();16 while((len = in.read(bytes)) != -1) {17 content.append(new String(bytes, 0, len, "utf-8"));18 }19 20 //构造Configuration21 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);22 //构造StringTemplateLoader23 StringTemplateLoader loader = new StringTemplateLoader();24 //添加String模板25 loader.putTemplate("test", content.toString());26 //把StringTemplateLoader添加到Configuration中27 configuration.setTemplateLoader(loader);28 29 //构造Model30 Classes classes = new Classes();31 classes.setClassId("23");32 classes.setClassName("实验一班");33 List<User> users = new ArrayList<User>();34 User user = new User("tom", "kkkkk", 29, "北京");35 users.add(user);36 User user2 = new User("Jim", "hhhh", 22, "上海");37 users.add(user2);38 User user3 = new User("Jerry", "aaaa", 25, "南京");39 users.add(user3);40 classes.setUsers(users);41 //获取模板42 Template template = configuration.getTemplate("test");43 //构造输出路44 out = new FileWriter("e:/html/result.html");45 //生成HTML46 template.process(classes, out);47 } catch (FileNotFoundException e) {48 e.printStackTrace();49 } catch (UnsupportedEncodingException e) {50 e.printStackTrace();51 } catch (IOException e) {52 e.printStackTrace();53 } catch (TemplateException e) {54 e.printStackTrace();55 } finally {56 if(null != in) {57 try {58 in.close();59 } catch (IOException e) {60 e.printStackTrace();61 } 62 }63 if(null != out) {64 try {65 out.close();66 } catch (IOException e) {67 e.printStackTrace();68 }69 }70 }71 72 }
联系客服