首先告诉大家这篇文章的原始出处:http://www.havenliu.com/java/514.html/comment-page-1#comment-756
我也是根据他所描述完成的,但是有一些地方有点模糊,不容易弄出来.所以,我另外写一篇,让大家少走一些弯路.
上图:是Word文档中的内容,也就是模板,为了下面步鄹做铺垫,所以在需要输入数据的地方改成了拼音,
将word文档另存为xml文件.
接下来,上面写的拼音就起到作用了.
打开xml文件.搜索 title.
将Title 改为 ${title}
其他地方一样的修改。
改完后,把文件的后缀名直接改成ftl。
需要下载freemarker相关jar包
在web项目下可以通过以下方式来生成word
package com.jieyuechina.test; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.jieyuechina.domain.model.CreditPool; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateExceptionHandler; public class DocumentHandler { private Configuration configuration = null; public DocumentHandler() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } public void createDoc() { //要填入模本的数据文件 Map<String,Object> dataMap=new HashMap<String,Object>(); getData(dataMap); //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载, //这里我们的模板是放在com.havenliu.document.template包下面 Configuration configuration = new Configuration(); //加载freemarker模板文件 try { configuration.setDirectoryForTemplateLoading(new File("E:\\javasoft\\Tomcat7.0.27\\Tomcat\\webapps\\jieyuechina\\WEB-INF\\views")); configuration.setDefaultEncoding("utf-8"); //设置对象包装器 configuration.setObjectWrapper(new DefaultObjectWrapper()); //设计异常处理器 configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER); //获取指定模板文件 Template template = configuration.getTemplate("out.ftl"); //定义输入文件,默认生成在工程根目录 Writer out = new OutputStreamWriter(new FileOutputStream("D:/outFile2.doc"),"UTF-8"); //写入目标文件中 //写的是freemarker 生成模板 template.process(dataMap, out);//写入目标文件 } catch (Exception e2) { // TODO Auto-generated catch block e2.printStackTrace(); } //在main中可以通过这种方式测试 // //configuration.setClassForTemplateLoading(this.getClass(), "/com/jieyuechina/template"); // Template t=null; // try { // //test.ftl为要装载的模板 // t = configuration.getTemplate("word.ftl"); // System.out.println(t); // } catch (IOException e) { // e.printStackTrace(); // } // //输出文档路径及名称 // File outFile = new File("D:/outFile.doc"); // 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(); // } } /** * 注意dataMap里存放的数据Key值要与模板中的参数相对应 * @param dataMap */ private void getData(Map<String,Object> dataMap) { dataMap.put("num", "861300100100004-001"); dataMap.put("method", "这是测试"); dataMap.put("name", "账单"); List<CreditPool> poos = new ArrayList<CreditPool>(); for (int i = 0; i <10; i++) { CreditPool poo = new CreditPool(); poo.setAgreement("1"); poo.setContractamount(33); poos.add(poo); } dataMap.put("table1", poos); } }
大家现在可能最关心的是遍历的文件。接下来我们看如何遍历数据。
freemarker的用法:http://www.havenliu.com/goodarticle/420.html
在刚刚的那个ftl文件中直接编辑:
打开FTL文件,搜索 <w:tr
找到第一个,tr的意思不用解释了吧,代表着一行。
这也意味着我找到了Table中的第一行,但是我需要遍历的不是从第一行开始,而是从第二行。
好的,继续搜索,找到第二个。
在它的头上加一个<#list 你的集合名称 as xxxx>
ok,有开头就有结尾,玩过JSP上的EL表达式应该不会感觉很陌生吧。
搜索 </w:tr>
同样找到第二个,加上</#list>结束符。
好的,这样就没问题了。
最好在要便利的list中进行一下判断 判断如下<#if list的名称 ??>
相关推荐
1.用word写一个需要导出的word模板,然后存为xml格式。 2.将xml中需要动态修改内容的地方,换成freemarker的标识符 添加图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开...
通过freemarker,实现word模板中占位符的赋值以及赋值后的word文档生成。通过jfreechart生成柱状图和饼图,并在word文档中显示。
Java用Freemarker 模板导出word文档,主要内容:1.工具代码,2.文档模板,3.模板格式化工具,4,freemarker jar包
基于Java语言来导出Word文档的方式也有很多种,如Jacob,Apache POI,Freemarker,PageOffice,java2word 等等。。。。 在这里将通过Freemarker这个模板引擎来实现导出 Word,项目不限于Swing,SSH,SSM,Spring ...
使用freemarker生成word ,并集成struts2 同时生成及下载文档 资料附有Java源代码和自己总结的使用说明及注意事项 大至预览如下: 1、用word编辑好模板 普通字符串替换为 ${string} 表格循环用标签 姓名:${...
Java用freemarker导出word文档
Springboot项目中: 1. 使用Apache POI 3.9 自定义样式导出Excel文件...2. 使用freemarker动态生成word .doc文档(带图片Word以及复杂格式word) 详细说明见个人博客及 github: https://github.com/DuebassLei/excel-poi
java freemarker导出word -包含多张图片导出
freemarker生成word文档模板,配合文档使用,效果更佳。https://blog.csdn.net/xueshuiyy/article/details/86748009
freemarker 模板格式 导出 word 文档
Freemarker + XML 生成word 文档 。具体步骤先用word做好模板,然后另存为xml 2003 版本的,修改后缀为.ftl文件。在文件中加入需要处理的循环标签 。一般是在开始的前面。
最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用freemarker模板生成word文档。里面包括完整代码和所需jar包。
使用freemarker生成复杂的word文档,生成的文档支持office查看,但是使用国产中标普华貌似有问题,office、wps没有问题。
1.用word写一个需要导出的word模板,然后存为xml格式。 2.将xml中需要动态修改内容的地方,换成freemarker的标识符 添加图片 如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开...
先创建一个word文档,按照需求在word中填好一个模板,然后将文档保存为xml文档格式,使用文档编辑器打开这个xml格式的文档(这里直接使用eclipse自带的编辑工具),把对应的数据换成变量${xxx},使用Freemarker读取...
SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环; 步骤说明: 1.用Microsoft Office Word打开word原件;将文档中需要动态生成的内容,替换为属性名 ${name} 2.另存为,选择保存类型Word 2003 XML 文档(*....
Freemarker+xml+java生成word文档,可以生成包含文字,图片等复杂得word文档
Java语言利用POI读取excel文档,利用Freemarker建立word模板(带图片),excel每一行数据生成单个word文档,再利用POI合并成一个word文档(源码); 博客地址:...
java利用freemarker生成word.pdf