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);
}
}
分享到:
相关推荐
对于频繁使用的模板,Freemarker可以缓存编译后的模板类,提高性能。 4. 国际化支持: Freemarker支持多语言环境,可以通过不同的消息资源文件提供不同语言的输出。 5. 静态类型检查: 使用`<#assign>`时可以...
本篇将深入讲解Freemarker的开发指南,帮助你更好地理解和使用这一工具。 1. **Freemarker基础概念** - **模板语言**:Freemarker使用的是基于文本的模板语言,它不包含任何编程语法,而是通过简单的标记来控制...
总的来说,FreeMarker是Java Web开发中一个非常实用的工具,通过将业务数据和页面展示分离,提高了代码的可维护性和灵活性。通过深入学习和使用FreeMarker,开发者可以更高效地构建动态网页,提高开发效率。
Java类通常继承`freemarker.template.TemplateDirectiveModel`接口,并重写`execute`方法。模板定义则是在`.ftl`文件中使用`<#assign...>`创建一个变量,然后将其关联到Java类实例。 3. **使用自定义标签** 在`....
本主题将深入讲解如何利用Freemarker生成Word文档,并提供相关的工具和示例。 1. **Freemarker基本概念** - Freemarker是基于模板的,它通过解析模板文件与数据模型结合,生成最终的输出。 - 数据模型通常是Java...
在实际应用中,你可以根据需要扩展这个工具类,例如增加错误处理、模板缓存等功能。代码可能如下所示: ```java import org.freemarker.template.Configuration; import org.freemarker.template.Template; import ...
这款工具并非面向最终用户,而是作为一个 Java 类库被程序员嵌入到他们开发的产品中。FreeMarker 采用了 Apache 许可证 2.0 版本发布,是完全免费的。 FreeMarker 的模板是用 FreeMarker Template Language (FTL) ...
本资料包“freemaker导出word的doc_docx_带动态图片及word转pdf工具类_jar_万能整理汇总rengm.zip”提供了关于如何使用Freemarker处理动态图片并转换Word为PDF的详细工具和教程。 首先,我们关注“doc_docx”部分。...
总的来说,"freemark插件"为Eclipse用户带来了专业的Freemarker开发工具集,通过其提供的各种特性,使得在Eclipse中编写和维护Freemarker模板变得更加轻松和高效。对于从事Java Web开发的人员,特别是那些频繁处理...
Hibernate通过将Java类与SQL数据库表映射,使得开发者可以使用对象模型进行数据库操作,而无需编写大量的SQL语句。 4. **Spring框架**:Spring是一个全面的Java企业级应用开发框架,它支持依赖注入、面向切面编程、...
Servlet与FreeMarker是Java Web开发中的两个重要技术,它们经常被组合使用来构建动态网站。...同时,标签中的“源码”和“工具”提示,意味着要关注底层实现和工具的使用,这对于提升开发技能非常有帮助。
需要注意的是,Freemarker的灵活性和强大功能使得它成为Web开发中表示层的强大工具,但也需要对模板语言有深入理解,才能充分利用其潜力。通过实践和不断学习,开发者可以掌握Freemarker的高级技巧,提升Web应用的...
4.5 自定义函数:通过`freemarker.template.utility`包中的工具类或者自定义`DirectiveModel`,可以实现模板中的自定义功能。 总结,Freemarker是一个强大的模板引擎,通过模板、数据模型和配置,能够灵活地生成...
总的来说,Freemarker是Java项目中生成静态页面的强大工具,结合Struts2可以构建高效、灵活的Web应用。通过熟练掌握Freemarker的语法和特性,你可以轻松地创建动态、响应式的用户界面。在sshDemo3TestFreeMark这个...
Java 利用freemark模板导出excel工具类,利用模板进行快速导出
JavaMail API包括了Message、Session、Transport等类,用于构建和发送邮件。 3. **集成FreeMarker与JavaMail**: 要将FreeMarker模板与JavaMail结合,首先需要创建一个FreeMarker模板文件(如`.ftl`),然后在Java...
总的来说,Freemarker Hellword是学习Freemarker基础的一个起点,通过这个简单的例子,我们可以了解Freemarker的基本用法和工作原理,为进一步深入学习和应用Freemarker打下基础。在实际项目中,熟练掌握Freemarker...
【简单CRUD代码生成工具详解】 在软件开发过程中,尤其是企业级应用开发,CRUD(Create, Read, Update, Delete)操作是最基本的数据操作。这些操作涵盖了创建新记录、读取现有记录、更新记录和删除记录,是数据库...
6. **模板加载器**:负责找到并加载模板文件,这通常是通过文件系统或类路径完成的。 7. **配置**:FreeMarker配置对象允许开发者设置全局属性,如模板语言的默认编码、模板加载策略等。 FreeMarker官方插件的使用...
这可以通过Maven或Gradle等构建工具完成,或者手动将JAR文件添加到项目的类路径中。 **3. 创建FreeMarker配置** 在Java代码中,我们需要创建一个`Configuration`对象来配置FreeMarker,设置模板目录、编码等参数。...