方法一:(这个方法借鉴freemarker的docs文档Programmer's Guide 的quick start部分,详细请看相关的文档。
public class HtmlTemplateGenerator {
Configuration cfg = null;
public HtmlTemplateGenerator(String templatePath) throws IOException {
cfg = new Configuration();
cfg.setDefaultEncoding("UTF-8");
cfg.setDirectoryForTemplateLoading(new File(templatePath));
cfg.setObjectWrapper(new DefaultObjectWrapper());
}
/**
* 生成静态文件
* @param ftlTemplate ftl模版文件
* @param contents ftl要用到的动态内容
* @param savePath 文件保存路径
* @param saveFilename 保存文件名
* @throws IOException
* @throws TemplateException
*/
public void create(String ftlTemplate, Map contents, String savePath, String saveFilename) throws IOException, TemplateException {
Template temp = cfg.getTemplate(ftlTemplate);
/* Merge data model with template */
String realPath = ServletActionContext.getServletContext().getRealPath(savePath);
System.out.println( saveFilename + ":" + realPath);
File file = new File(realPath);
if(!file.exists())
file.mkdirs();
Writer out = new OutputStreamWriter(new FileOutputStream(realPath + "/" + saveFilename),"UTF-8");
temp.process(contents, out);
out.flush();
}
}
如果用spring,可以将它配置成bean,然后在其他地方使用。第五行的 templatePath 是模版文件的路径,比如/WEB-INF/template。
action中的使用:HtmlTemplateGenerator.create("html/magazine/search.ftl",
null, "/magazine", "search.html");
其中“html/magazine/search.ftl”是在“/WEB-INF/template”目录下。这里还需要注意的是。模版文件
(search.ftl)中如果还要引用其他文件,它的路径也是不需要添加总路径“/WEB-INF/template”。
方法二:继承webwork的FreemarkerResult,改写getWriter方法:
不知有无好的法子。
protected Writer getWriter() throws IOException {
String savePath = (String) ActionContext.getContext().getSession().get("SAVE_PATH");
String saveFilename = (String) ActionContext.getContext().getSession().get("SAVE_FILENAME");
String realPath = ServletActionContext.getServletContext().getRealPath(savePath);
System.out.println( saveFilename + ":" + realPath);
File file = new File(realPath);
if(!file.exists())
file.mkdirs();
return templateOut = new OutputStreamWriter(new
FileOutputStream(realPath + "/" + saveFilename),"UTF-8");
}
这里的路径和文件名通过webwork的session传入,不知有无其他好方法。
如果生成文件的同时还需要看到生成的页面,则要改写“doExecute”:
template.process(model, getWriter());
template.process(model, super.getWriter()); //添加这句
templateOut.flush();
生成的文件格式不限于html,可以是其他文件格式,如js,text等。
比较这两种方法:
方法一:在需要生成分页文件时,比较合适。
方法二:可以象往常一样使用,一次需要生成多文件则不适合。
分享到:
相关推荐
freemarker生成静态页面------内含使用说明 freemarker生成静态页面------内含使用说明 freemarker生成静态页面------内含使用说明
NULL 博文链接:https://fackyou200.iteye.com/blog/972795
用freemarker做模板,结合struts2生成静态页面功能,不要分,嘻嘻
你可以直接写一个java main方法来调用它,我的代码生成器就是这么做的. 2.freemarker 写出来的页面一般都是xml格式友好的,也就是说你可以写出很规范的xhtml,而且还可以直接使用一些xml的代码格式化工具直接美化.而且...
Freemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+javaFreemarker模板生成pdf+java
struts2+freemarker 生成静态页面,希望对大家有用!!!!
FreeMarker教你如何生成html静态页面源码
springboot整合freemarker生成静态html的demo 主要讲解了通过模板生成html和通过字符串生成html
freemarker创建静态网页的一个小例子
主要就是用servlet做的,freemarker和httpclient的静态化都封装好了工具类了,简单,有文档,可以看懂
那么我们就把把页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。
freemarker生成静态HTML例子
代码生成器支持model、Mapper、Dao、Service、ServiceImpl、Controller 一次性的生成,支持同时生成多张表,此代码生成器依赖JAR包比较少,除了必用Freemarker 和JDBC之外基本上完全个人编写
通过程序生成PDF文件, wkhtmltox-0.12.3.2_msvc2013-win64.exe html-url
freemarker html生成pdf 通过freemarker 和html模板生成对应的pdf或者图片 参考使用,欢迎下载
NULL 博文链接:https://goby2008.iteye.com/blog/627076
NULL 博文链接:https://depravedangel.iteye.com/blog/443575
Springboot项目中: 1. 使用Apache POI 3.9 自定义样式导出Excel文件...2. 使用freemarker动态生成word .doc文档(带图片Word以及复杂格式word) 详细说明见个人博客及 github: https://github.com/DuebassLei/excel-poi
最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用freemarker模板生成word文档。里面包括完整代码和所需jar包。
这是一个eclipse下创建的一个project,里面有一个freemarker生成html及一些语法示例