`
wait10000y
  • 浏览: 6707 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

freemark简单工具类

阅读更多
package com.broadtext.tdc.report.mftable.others;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import javax.servlet.ServletContext;
import freemarker.cache.MruCacheStorage;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
 * 
 *  Freemark 导出excel 的简单工具
 *  其他的可解析文件同样适用.
 *  同样 日期问题 没有解决;(最好用java.sql包下的日期)
 * @Time 下午03:44:36
 * @author wsliang
 */
public class FreeMarkUtils {
	
	// 初始化configuration
	private static Configuration cfg = null;
	static{
		//创建配置实例
		cfg = new Configuration();
		
		//指定模板如何查看数据模型
		cfg.setObjectWrapper(new DefaultObjectWrapper());
		
		//设置共享变量,或者共享方法
		// cfg.setSharedVariable("upper", new TemplateModel());
		
		//设置缓存 字符编码 等.
		cfg.setCacheStorage(new MruCacheStorage(20, 260));
		cfg.setDefaultEncoding("UTF-8");
		//cfg.setTimeFormat("yyyy-MM-dd");
	}
	/**
	 * 
	 *  通过传入 ServletContext 方法得到 template实例
	 * @param context ServletContext 
	 * @param filePath 相对web服务器的相对地址目录
	 * @param filename 
	 * @return template 
	 * @throws IOException
	 */
	public static Template getTemplate(ServletContext context,String filePath,String fileName) throws IOException{
		
		//设置模板的根目录,加载模板的一种设置共3中
		cfg.setServletContextForTemplateLoading(context, filePath);
		
		//从Configuration实例中获取模板实例,这里存储的都是解析过的模板内容
		Template temp = cfg.getTemplate(fileName,"UTF-8");
		//修改配置参数
		//temp.setLocale(Locale.CHINA);
		return temp;
	}
	
	/**
	 * 
	 *  通过传入文件目录和文件名 方法得到 template实例
	 * @param filePath 绝对路径或者相对工程加载路径
	 * @param filename
	 * @return Template
	 * @throws IOException
	 */
	public static Template getTemplate(String filePath,String fileName) throws IOException{
		
		//设置模板的根目录,加载模板的一种设置共3中
		cfg.setDirectoryForTemplateLoading(new File(filePath));
		
		//从Configuration实例中获取模板实例,这里存储的都是解析过的模板内容
		Template temp = cfg.getTemplate(fileName,"UTF-8");
		
		//修改配置参数
		//temp.setLocale(Locale.CHINA);
		return temp;
	}
	
	/**
	 * 
	 *  通过类加载 方法得到 template实例
	 * @param clases
	 * @param filePath
	 * @param filename
	 * @return
	 * @throws IOException
	 */
	public static Template getTemplate(Class clases,String filePath,String fileName) throws IOException{
		
		//设置模板的根目录,加载模板的一种设置共3中
		cfg.setClassForTemplateLoading(clases,filePath);
		
		//从Configuration实例中获取模板实例,这里存储的都是解析过的模板内容
		Template temp = cfg.getTemplate(fileName,"UTF-8");
		
		//修改配置参数
		//temp.setLocale(Locale.CHINA);
		return temp;
	}

	/**
	 * 
	 * 方法说明
	 * @param filePath 相对 context 的文件地址
	 * @param fileName
	 * @param data 数据对象
	 * @return InputStream
	 * @throws IOException 
	 * @throws TemplateException 
	 */
	public static InputStream getInputStream(String filePath,String fileName,Object data,ServletContext context) throws TemplateException, IOException{
		
		ByteArrayOutputStream baout = new ByteArrayOutputStream();
		OutputStreamWriter out = new OutputStreamWriter(baout,"UTF-8");
		getTemplate(context, filePath, fileName).process(data, out);
		out.flush();
		 return new ByteArrayInputStream(baout.toByteArray());
	}
	/**
	 * 
	 * 方法说明
	 * @param filePath 相对 clases 的文件地址
	 * @param fileName
	 * @param data
	 * @param clases
	 * @return InputStream
	 * @throws TemplateException
	 * @throws IOException
	 */
	public static InputStream getInputStream(String filePath,String fileName,Object data,Class clases) throws TemplateException, IOException{
		
		ByteArrayOutputStream baout = new ByteArrayOutputStream();
		OutputStreamWriter out = new OutputStreamWriter(baout,"UTF-8");
		getTemplate(clases, filePath, fileName).process(data, out);
		out.flush();
		 return new ByteArrayInputStream(baout.toByteArray());
	}
	/**
	 * 
	 * 方法说明
	 * @param filePath 文件绝对地址或者相对工程的地址目录
	 * @param fileName
	 * @param data
	 * @return InputStream
	 * @throws TemplateException
	 * @throws IOException
	 */
	public static InputStream getInputStream(String filePath,String fileName,Object data) throws TemplateException, IOException{
		
		ByteArrayOutputStream baout = new ByteArrayOutputStream();
		OutputStreamWriter out = new OutputStreamWriter(baout,"UTF-8");
		getTemplate(filePath, fileName).process(data, out);
		out.flush();
		 return new ByteArrayInputStream(baout.toByteArray());
	}
	
public static void mixTempletAndData(String filePath,String fileName,Object data,Writer out) throws TemplateException, IOException{
		getTemplate(filePath, fileName).process(data, out);
		out.flush();
	}

	public static void main(String[] args) throws TemplateException, IOException {
		// test.xml 的文件地址为 com/wsliang/test/test.xml
		FreeMarkUtils.getInputStream("com/wsliang/test", "/test.xml", new HashMap(), FreeMarkUtils.class);
	}

}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    freemark 资料学习

    对于频繁使用的模板,Freemarker可以缓存编译后的模板类,提高性能。 4. 国际化支持: Freemarker支持多语言环境,可以通过不同的消息资源文件提供不同语言的输出。 5. 静态类型检查: 使用`<#assign>`时可以...

    freemark开发指南详解

    本篇将深入讲解Freemarker的开发指南,帮助你更好地理解和使用这一工具。 1. **Freemarker基础概念** - **模板语言**:Freemarker使用的是基于文本的模板语言,它不包含任何编程语法,而是通过简单的标记来控制...

    freemark 生成静态页面

    总的来说,FreeMarker是Java Web开发中一个非常实用的工具,通过将业务数据和页面展示分离,提高了代码的可维护性和灵活性。通过深入学习和使用FreeMarker,开发者可以更高效地构建动态网页,提高开发效率。

    freemark 自定义标签 总结

    Java类通常继承`freemarker.template.TemplateDirectiveModel`接口,并重写`execute`方法。模板定义则是在`.ftl`文件中使用`<#assign...>`创建一个变量,然后将其关联到Java类实例。 3. **使用自定义标签** 在`....

    freemarker

    本主题将深入讲解如何利用Freemarker生成Word文档,并提供相关的工具和示例。 1. **Freemarker基本概念** - Freemarker是基于模板的,它通过解析模板文件与数据模型结合,生成最终的输出。 - 数据模型通常是Java...

    freemark首次使用代码,(包括freemarker.jar,模板xml以及java调用代码)

    在实际应用中,你可以根据需要扩展这个工具类,例如增加错误处理、模板缓存等功能。代码可能如下所示: ```java import org.freemarker.template.Configuration; import org.freemarker.template.Template; import ...

    FreeMarker

    这款工具并非面向最终用户,而是作为一个 Java 类库被程序员嵌入到他们开发的产品中。FreeMarker 采用了 Apache 许可证 2.0 版本发布,是完全免费的。 FreeMarker 的模板是用 FreeMarker Template Language (FTL) ...

    freemaker导出word的doc_docx_带动态图片及word转pdf工具类_jar_万能整理汇总rengm.zip

    本资料包“freemaker导出word的doc_docx_带动态图片及word转pdf工具类_jar_万能整理汇总rengm.zip”提供了关于如何使用Freemarker处理动态图片并转换Word为PDF的详细工具和教程。 首先,我们关注“doc_docx”部分。...

    freemark插件

    总的来说,"freemark插件"为Eclipse用户带来了专业的Freemarker开发工具集,通过其提供的各种特性,使得在Eclipse中编写和维护Freemarker模板变得更加轻松和高效。对于从事Java Web开发的人员,特别是那些频繁处理...

    freemark+ssh 配置图解

    Hibernate通过将Java类与SQL数据库表映射,使得开发者可以使用对象模型进行数据库操作,而无需编写大量的SQL语句。 4. **Spring框架**:Spring是一个全面的Java企业级应用开发框架,它支持依赖注入、面向切面编程、...

    servlet与freeMark组合

    Servlet与FreeMarker是Java Web开发中的两个重要技术,它们经常被组合使用来构建动态网站。...同时,标签中的“源码”和“工具”提示,意味着要关注底层实现和工具的使用,这对于提升开发技能非常有帮助。

    freemark开发指南(入门)

    需要注意的是,Freemarker的灵活性和强大功能使得它成为Web开发中表示层的强大工具,但也需要对模板语言有深入理解,才能充分利用其潜力。通过实践和不断学习,开发者可以掌握Freemarker的高级技巧,提升Web应用的...

    freemark中文文档

    4.5 自定义函数:通过`freemarker.template.utility`包中的工具类或者自定义`DirectiveModel`,可以实现模板中的自定义功能。 总结,Freemarker是一个强大的模板引擎,通过模板、数据模型和配置,能够灵活地生成...

    Java项目Freemark生成静态页面及语法

    总的来说,Freemarker是Java项目中生成静态页面的强大工具,结合Struts2可以构建高效、灵活的Web应用。通过熟练掌握Freemarker的语法和特性,你可以轻松地创建动态、响应式的用户界面。在sshDemo3TestFreeMark这个...

    ExportExcel.java

    Java 利用freemark模板导出excel工具类,利用模板进行快速导出

    java freemark发送模板邮件

    JavaMail API包括了Message、Session、Transport等类,用于构建和发送邮件。 3. **集成FreeMarker与JavaMail**: 要将FreeMarker模板与JavaMail结合,首先需要创建一个FreeMarker模板文件(如`.ftl`),然后在Java...

    freemark hellword

    总的来说,Freemarker Hellword是学习Freemarker基础的一个起点,通过这个简单的例子,我们可以了解Freemarker的基本用法和工作原理,为进一步深入学习和应用Freemarker打下基础。在实际项目中,熟练掌握Freemarker...

    简单crud代码生成工具

    【简单CRUD代码生成工具详解】 在软件开发过程中,尤其是企业级应用开发,CRUD(Create, Read, Update, Delete)操作是最基本的数据操作。这些操作涵盖了创建新记录、读取现有记录、更新记录和删除记录,是数据库...

    freemark官方插件

    6. **模板加载器**:负责找到并加载模板文件,这通常是通过文件系统或类路径完成的。 7. **配置**:FreeMarker配置对象允许开发者设置全局属性,如模板语言的默认编码、模板加载策略等。 FreeMarker官方插件的使用...

    在java代码中引用freemark

    这可以通过Maven或Gradle等构建工具完成,或者手动将JAR文件添加到项目的类路径中。 **3. 创建FreeMarker配置** 在Java代码中,我们需要创建一个`Configuration`对象来配置FreeMarker,设置模板目录、编码等参数。...

Global site tag (gtag.js) - Google Analytics