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 //构造Configuration 21 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); 22 //构造StringTemplateLoader 23 StringTemplateLoader loader = new StringTemplateLoader(); 24 //添加String模板 25 loader.putTemplate("test", content.toString()); 26 //把StringTemplateLoader添加到Configuration中 27 configuration.setTemplateLoader(loader); 28 29 //构造Model 30 User user = new User("tom", "kkkkk", 29, "北京山东"); 31 //获取模板 32 Template template = configuration.getTemplate("test"); 33 //构造输出路 34 out = new FileWriter("e:/html/result.html"); 35 //生成HTML 36 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 //构造Configuration 21 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); 22 //构造StringTemplateLoader 23 StringTemplateLoader loader = new StringTemplateLoader(); 24 //添加String模板 25 loader.putTemplate("test", content.toString()); 26 //把StringTemplateLoader添加到Configuration中 27 configuration.setTemplateLoader(loader); 28 29 //构造Model 30 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 //生成HTML 46 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 }