Freemarker导出word的简单使用

1.模板

username:${username}
password:${password}
<#list mylist as item>
${item.name!}
${item.password!}
${item.sex!}
${item.phto!}
</#list >

2.Java类

package servlet;

import java.io.BufferedWriter;
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 org.junit.Test;

import bean.TestFreemarkerBean;
import freemarker.template.Configuration;
import freemarker.template.Template;

public class FreeMarkerExportWord {

    @Test
    public void exportSimpleWord() throws Exception {
        // 要填充的数据, 注意map的key要和word中${xxx}的xxx一致
        Map<String, Object> dataMap = new HashMap<String, Object>();
        dataMap.put("username", "张三");
        dataMap.put("password", "男");

        // Configuration用于读取ftl文件
        Configuration configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");

        /*
         * 以下是两种指定ftl文件所在目录路径的方式, 注意这两种方式都是 指定ftl文件所在目录的路径,而不是ftl文件的路径
         */
        // 指定路径的第一种方式(根据某个类的相对路径指定)
        configuration.setClassForTemplateLoading(this.getClass(), "");
        // 指定路径的第二种方式,我的路径是C:/a.ftl
        // configuration.setDirectoryForTemplateLoading(new File("C:/"));

        List<TestFreemarkerBean> list = new ArrayList<>();
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        list.add(new TestFreemarkerBean("乔治", "123456", "男", "wwwwwwww"));
        dataMap.put("mylist", list);
        // 输出文档路径及名称
        File outFile = new File("F:/test.doc");

        // 以utf-8的编码读取ftl文件
        Template t = configuration.getTemplate("test2.ftl", "utf-8");
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
        t.process(dataMap, out);
        out.close();
    }
}

3.测试:

时间: 2024-10-12 23:59:24

Freemarker导出word的简单使用的相关文章

Java用freemarker导出word

最近一个项目要导出word文档,折腾老半天,发现还是用freemarker的模板来搞比较方便省事,现总结一下关键步骤,供大家参考,这里是一个简单的试卷生成例子. 一.模板的制作 先用Word做一个模板,如下图: (注意,上面是有表格的,我设置了边框不可见)然后另存为XML文件,之后用工具打开这个xml文件,有人用firstobject XML Editor感觉还不如notepad++,我这里用notepad++,主要是有高亮显示,和元素自动配对,效果如下: 上面黑色的地方基本是我们之后要替换的地

使用Freemarker导出Word文档(包含图片)代码实现及总结

本篇是关于利用FreeMarker导出Word的实现步骤.采用FreeMarker非常的灵活,能够按照自己指定的样式设置并输出内容,操作简单方便,代码实现也容易. 下面是实现的效果图: 下面是实现步骤: 1.添加FreeMarker需要的jar包(这里用的是2.3.28版本,从网上的maven仓库中获取的) <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</ar

freemarker导出word——让表格数据行数 列数自动变化

行数.列数变化只需定义一个List<List<T>> freemarker遍历的话,只需要使用freemarker的标记性语言<#list report.qc_third_agentTable as  table2_tr>遍历即可,如图 实现的效果 freemarker导出word--让表格数据行数 列数自动变化,布布扣,bubuko.com

java web项目利用freeMarker导出word

导出的word地址是在后台控制的,如何做到在浏览器弹框选择地址?如下代码11行中导出的路径是在JAVA代码中写死的,如何在浏览器弹框选择地址 1 configuration.setDirectoryForTemplateLoading(new File(sourcePath)); // FTL文件所存在的位置 2 configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER); 3 Templa

java用freemarker导出数据到word(含多图片)

一.制作word模版 新建word文档,按照需要设置好字体等各种格式:这里为了显得整齐使用了无边框的表格. 将word文档另存为xml文件(注意不是word xml文档,我吃了这家伙的大亏了) 然后用文本编辑器打开这个xml文件,将需要动态显示的文字替换为变量,如:${topicName}, 图片需要1.将w:binData标签的一堆字符替换成将来包含图片字符的变量2.为了防止生成多图时出错,将v:shape标签的id属性.v:imagedata标签的src属性.w:binData标签的w:na

通过freemarker出word的技术解决方案_通过点击一个按钮临时实现生成一个word,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件 详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(site.wzmc)?default("")}标识当网站名称为空的时候显示空值,如果这里如果不做控制,在实际项目中会显示错误!) 另外

利用Freemarker生成word的使用(java)

首先向客户获得一份平时需要的word模板,将需要用程序填写的数据使用能够区分的字母,如XXXXX. 第二步就是把word模板,转化为xml文件(word可以另存为xml的),用EditorPlus等工具打开,注意字符编码,word的字符编码为utf-8,所以打开是最好是先不要改动,先看编码是否正确(不正确的改下字符编码),然后格式化一下xml文件,格式化后方面阅读(格式化,网上有很多在线格式化工具),然后寻找你刚才在word中留下的标记,把他们换成freemarker标记,其语法跟struts语

mvc中html导出成word下载-简单粗暴方式

由于工作需求,需要把html简历页导出成word下载.网上搜索了很多解决方案,基本都是用一些插件,然后写法也很麻烦,需要创建模板什么的. 固定替换值  代码一大堆.但是对于我的需求来说  并没有什么用,因为我这边的数据不能固定.  所以只能另寻办法,皇天不负有心人   找了一天 终于找到了  哈哈 mvc中的FlieResult  非常强大  可以直接传入html   指定文件格式  直接返回Flie文件下载 不多说了   直接上代码吧   非常之简单粗暴 后台代码: [ValidateInpu

Java 用Freemarker完美导出word文档(带图片)

Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. 准备材料 1.word原件 2.编辑器(推荐Firstobject free XML editor) 实现步骤 1.用Microsoft Office Word打开word原件: 2.把需要动态修改的内容替换成***,如果有图片,尽量选择较小的图片几十K左右,并调整好位置: 3.另存为,选择保存类型