word模版,另存成test.xml ,然后修改参数 。将test.xml改为test.ftl.
然后用网上的这段代码生成word文档。 打开时总是提示如下图(数据填入正确)
public void createDoc() {
//要填入模本的数据文件
Map<String,String> dataMap=new HashMap<String,String>();
getData(dataMap);
//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,
//这里我们的模板是放在com.havenliu.document.template包下面
configuration.setClassForTemplateLoading(this.getClass(), "");
Template t=null;
try {
//test.ftl为要装载的模板
t = configuration.getTemplate("test.ftl");
} catch (IOException e) {
e.printStackTrace();
}
//输出文档路径及名称
File outFile = new File("D:/outFile.xml");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
t.process(dataMap, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally
{
try {
out.close(); //释放流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java freemarker 通过ftl模板导出word文档
循环列表需要加<#list datas as bean></#list>标签的;
<#list datas as bean></#list>加载哪个位置呢?
我写了个例子给你,但是代码太长,发不了,你对着图看看吧
java方式导出word文档需要修改文字样式,跪求高手解决,急,在线等。
问题没说清楚。
对于word的操作,如果是 docx 可以把 docx当做zip来解压缩,解开后会得到文档的xml文件,稍加琢磨可以理解其中的含义,修改后,再更新回原zip更多
我的需求就是根据word模板导出word,然后word里面的内容需要从数据库查出来替换,现在我是使用FreeMarker的方式,把word另存为xml格式,然后改后缀名为ftl格式,现在能把里面的内容替换然后导出来,但是内容的样式不能改变。
哦,把模板中要改变的内容区域替换成 ${document},然后数据库中读到的内容赋值给document不就OK了?
问题是替换掉后,部分内容需要修改字体样式。
不知道你的ftl中的内容如何生成的,如果里面没有样式定义也谈不上改样式,建议你看看我说的docx 解压缩出的 document.xml ,其中是含有样式定义的,
例如:
java freemarker引擎 导出word文档
要生成的数据,在java后台必须是用Map格式,这个你检查一下有没有问题。如果有list,也要放到map里面去。
HashMap<String,Object>dataMap=newHashMap<String,Object>();Configurationconf=newConfiguration();
Templatet=conf.getTemplate(fileName);
FiledocFile=newFile(filePath+"/"+docName);
out=newOutputStreamWriter(newFileOutputStream(docFile),"UTF-8");
t.process(dataMap,out);
更多谢谢你朋友 是这样的 我主要是不会编辑ftl模板 看了很多帖子说是要加上
<#list as....>之类的标签 可是我不知道加在哪里
ftl不会写?那还怎么用freemarker。
把你要循环显示的内容删了,空出来的那个位置就是你要写list的地方。
我昨天刚知道有freemarker这玩意的 对它了解不多 我试试
这东西不难,很快就能学会的,你可以看下这个。
http://blog.csdn.net/fhx007/article/details/7902040/
freemarker支持哪些导出
将要导出的Word另存为xml格式的文件,打开xml 在其中添加freemarker标签,然后另存为outChairDoc.ftl文件. 第一步要加入Freemarker.jar包。 Servlet代码如下:在outChairDoc.ftl放在包cn.skyclass.jiaowu.freemarker.template下 public void doGe...
我用freemaker导出word时,有模板,现在想导出的时候,可以自定义的在word中插入单元格
jsp添加事件,上传名字和电话到后台,后台调用ftl模板动态生成表格,ftl模板中用循环标签,不要写死。
maven用freemarker导出word的jsp页面怎么写
整个网站首页的基本结构是通过jsp的include标签将所有通过freemarker生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。
以下是我生成静态页最核心的方法,使用freemarker。
/**
* 生成静态页面主方法
* @param context ServletContext
* @param data 一个Map的数据结果集
* @param templatePath ftl模版路径
* @param targetHtmlPath 生成静态页面的路径
*/
public static void crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){
Configuration freemarkerCfg = new Configuration();
//加载模版
freemarkerCfg.setServletContextForTemplateLoading(context, "/");
freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");
try {
//指定模版路径
Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");
template.setEncoding("UTF-8");
//静态页面路径
String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath;
File htmlFile = new File(htmlPath);
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
//处理模版
template.process(data, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
其实很简单,只要Google一下就有很多这方面的代码。我也是Google的代码然后自己再根据实际情况修改。简单说明一下参数:
ServletContext :这个不用说了吧。做java web的应该都知道,只不过struts2中这样获取ServletActionContext.getServletContext()
Map<String,Object> data : 模版的数据来源。freemarker通过一个Map给ftl模版送数据。
现在已友情链接为列子详细介绍静态页面如何生成。其他模块以此类推。
String templatePath : ftl所在的路径。我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。
String targetHtmlPath : 最后生成静态页的路径:我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。
友情链接根据这段代码<jsp:include page="/html/index_link.html" flush="true"></jsp:include>我们需要freemarker生成一个index_link.html文件。友情链接数据来源通过数据库查询获取。
然后再写一个方法专门生成友情链接静态页面:
/**
* 生成友情链接的静态页index_link.html
* @param context
* @param data
*/
public static void createIndexFriendLink(ServletContext context,Map<String,Object> data){
crateHTML(context,data,"index_link.ftl","index_link.html");
}
此方法调用上面的createHTML方法。
然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法生成静态页了。
这是action中的一个方法:
/**
* 生成友情链接静态页index_link.html
* @return
*/
public String createLink(){
//权限验证
if(! this.isAccess())
return "error";
try{
//得到友情链接
List links = friendLinkDAO.findAll();
//准备数据
HashMap<String,Object> data = new HashMap<String,Object>();
data.put("links", links);
//调用静态页面方法
HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);
addActionMessage("静态页面生成成功!");
return "message";
}catch(Exception e){
e.printStackTrace();
return "failure";
}
}
List links = friendLinkDAO.findAll();通过spring注入action的hiberate DAO获取数据给list然后通过以下代码
HashMap<String,Object> data = new HashMap<String,Object>();
data.put("links", links);
准备数据调用createIndexFriendLink()方法。
以下是:ftl模版源码:
<#if links?size != 0>
< div class="link">
<strong>友情链接:</strong>
<#list links as link>
<a href="${link.linkUrl}" target="_blank" title="${link.linkName}">${link.linkName}</a>
</#list>
< /div>
< #else>
< div class="link"></div>
< /#if>
freemarker问题,ftl文件制作问题,java问题。
ftl只是一个后缀而已,不一定需要叫xxx.ftl,java封装好data,调用freemarker的process替换其中的${xxx}
能告诉我怎么生成的吗?
那里面6000多行代码肯定不是手写的,所以我觉得 .ftl 的文件是生成的。我的问题就是这个,.ftl文件时通过什么方式生成的。 评论中有部分代码,你看下。放这里字数不够
转载请注明出处51数据库 » ftl导出word word文档转化成ftl文件
爱国者I帕克






