Java使用FreeMarker生成动态表格

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DWL0208/article/details/82050849

      FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据 。

在开发配置报表项目时使用到了freemarker模板引擎作为报表的表格模板,所以今天写一篇博客加强一下学习效果。

1.写一个简单的模板文件table.ftl

<table>
 <tr>
	<td>姓名</td><td>座右铭</td>
 </tr> 
 <tr>
	<td>${name}</td><td>${msg}</td>
 </tr> 
</table>

2.引入freemarker

<dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>

3.编写Java方法

package com.dwl.rep.common;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class FreeMarkerTest {
	
	
	
	public static void main(String[] args) {
		Map<String, Object> data = new HashMap<>();
		data.put("name", "daiwenlong");
		data.put("msg", "hello world");
		System.out.println(MakeHtml(data));
	}
	
	
	
	/**
	 * 生成带数据的html
	 * @param data 数据
	 * @return
	 */
	public static String MakeHtml(Map<String, Object> data){
	    // 第一步:创建一个Configuration对象。
	    Configuration configuration = new Configuration(Configuration.getVersion());
	    // 创建一个Writer对象。
            StringWriter out = new StringWriter();
            try {
        	// 第二步:设置模板文件所在的路径。  
		configuration.setDirectoryForTemplateLoading(new File("D:\\JavaWorkspace"));
		// 第三步:设置模板文件使用的字符集。 
	        configuration.setDefaultEncoding("utf-8");  
	        // 第四步:加载一个模板,创建一个模板对象。  
	        Template template = configuration.getTemplate("table.ftl");  
	        // 第五步:调用模板对象的process将数据塞入模板中。  
	        template.process(data, out);
	        //返回处理好的HTML字符串
	        return out.toString();
		} catch (IOException|TemplateException e) {
			return "error";
		} finally {
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
         	
	}

}

4.查看控制台输出结果

猜你喜欢

转载自blog.csdn.net/DWL0208/article/details/82050849