import java.io.BufferedWriter;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.Writer;

import java.util.Map;

import freemarker.template.Configuration;

import freemarker.template.Template;

public class DocumentHandler {

private Configuration configuration = null;

/**

* 创建configuration

* @param ftlSrc  模版存放路径,ftl所在的文件夹路径

*/

public DocumentHandler(String ftlSrc) {

configuration = new Configuration();

configuration.setDefaultEncoding("utf-8");

try {

configuration.setDirectoryForTemplateLoading(new File(ftlSrc));

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 根据ftl生成word方法

* @param dataMap   -- 数据集

* @param fileSrc   -- 生成后的文件地址

* @param ftlName   -- ftl模版名称

*/

public void createOrderAndDown(Map<String,Object> dataMap,String fileSrc,String ftlName) {

Template t=null;

try {

//test.ftl为要装载的模板

t = configuration.getTemplate(ftlName);

} catch (IOException e) {

e.printStackTrace();

}

//输出文档路径及名称

File outFile = new File(fileSrc);

//如果输出目标文件夹不存在,则创建

if (!outFile.getParentFile().exists()){

outFile.getParentFile().mkdirs();

}

Writer out = null;

try {

out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));

//生成

t.process(dataMap, out);

} catch (Exception e) {

e.printStackTrace();

}finally {

if(out!=null){

//关闭流

try {

out.flush();

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 要把模版生成合同

* @param dataMap   数据map集合

* @param fileSrc   生成后的文件路径

*/

public void createDoc(Map<String,Object> dataMap,String fileSrc) {

//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,

//这里我们的模板是放在/com/zhiwei/credit/util/xmlToWord/firstCreditor包下面

//      configuration.setClassForTemplateLoading(this.getClass(), "/com/zhiwei/credit/util/xmlToWord/firstCreditor");

//      configuration.setServletContextForTemplateLoading(ServletActionContext.getContext(), "WEB-INF/templates");

//      configuration.setDirectoryForTemplateLoading(arg0);

Template t=null;

try {

//test.ftl为要装载的模板

t = configuration.getTemplate("firstCreditor.ftl");

} catch (IOException e) {

e.printStackTrace();

}

//输出文档路径及名称

File outFile = new File(fileSrc);

//如果输出目标文件夹不存在,则创建

if (!outFile.getParentFile().exists()){

outFile.getParentFile().mkdirs();

}

Writer out = null;

try {

out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));

//生成

t.process(dataMap, out);

} catch (Exception e) {

e.printStackTrace();

}finally {

if(out!=null){

//关闭流

try {

out.flush();

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

DocumentHandler-ftl生成word的更多相关文章

  1. JAVAWEB使用FreeMarker利用ftl把含有图片的word模板生成word文档,然后打包成压缩包进行下载

    这是写的另一个导出word方法:https://www.cnblogs.com/pxblog/p/13072711.html 引入jar包,freemarker.jar.apache-ant-zip- ...

  2. FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行.所以此方案是:APP将表单数据发送给后台,后台通过freemarker ...

  3. JAVA生成word的几种方法对比

    首先介绍几种java导出word方案 1.Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...

  4. 使用freemarker生成word,步骤详解并奉上源代码

    1.   步骤 1.    用word编辑好模板 1. 普通字符串替换为 ${string} 2. 表格循环用标签 <#list userList as user> 姓名:${user.u ...

  5. java freemark生成word文档

    1.下载freemarker-2.3.19.jar 2.把要填充的内容用  ${title},${no}代替 3.用word 打开,保存为2003xml 4.打开生成xml文件,看下有没有把表达式  ...

  6. 使用freemarker模板生成word文档

    项目中最近用到这个东西,做下记录. 如下图,先准备好一个(office2003)word文档当做模板.文档中图片.姓名.性别和生日已经使用占位符代替,生成过程中将会根据实际情况进行替换. 然后将wor ...

  7. 【java】Freemarker 动态生成word(带图片表格)

    1.添加freemarker.jar 到java项目. 2.新建word文档. 3.将文档另存为xml 格式. 4.将xml格式化后打开编辑(最好用notepad,有格式),找到需要替换的内容,将内容 ...

  8. springboot中使用freemarker生成word文档并打包成zip下载(简历)

    一.设计出的简历模板图以及给的简历小图标切图         二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件:    三.直 ...

  9. freemarker根据模板生成word文件实现导出功能

    一.准备工作 1.创建一个03的word文档,动态的数据用占位符标志占位(如testname).然后另存为word2003的xml文件. 2.格式化xml文件,占位符的位置用${testname}代替 ...

随机推荐

  1. Tomcat配置域名、ip访问及解决80端口冲突

    1.先在tomcat下的conf下找到server.xml文件,用记事本打开后,首先对端口号进行修改,以前一直以为8080是默认的端口号,其实默认的端口号是80 <Connector port= ...

  2. 性能测试基础---LR关联2

    ·LR中的关联函数详解.在LR中,用于关联的函数一般有以下四个:web_reg_save_param 是通过字符串查找的方式来查找获取数据.web_reg_save_param_ex 是通过字符串查找 ...

  3. 一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系

    以下内容都是针对Pytorch 1.0-1.1介绍. 很多文章都是从Dataset等对象自下往上进行介绍,但是对于初学者而言,其实这并不好理解,因为有的时候会不自觉地陷入到一些细枝末节中去,而不能把握 ...

  4. php中的闭包类

    看注释 <?php //闭包类实现匿名函数 //call方法调用 class Customer { private $firstname; private $lastname; public f ...

  5. python正则表达式(7)--flag修饰符、match对象属性

    正则表达式—修饰符 正则表达式可以包含一些标志修饰符来控制匹配模式,用在正则表达式处理函数中的flag参数中,为可选参数. (1) re.I 全写(re.IGNORECASE) 表示使匹配时,忽略大小 ...

  6. Vue之Action

    (1)同步与异步 在 mutation 中混合异步调用会导致你的程序很难调试. 例如,当你调用了两个包含异步回调的 mutation 来改变状态,你怎么知道什么时候回调和哪个先回调呢? 这就是为什么我 ...

  7. Could not resolve com.android.support:design 28.0.0

    想试一试android的那个侧滑栏功能,需要用到 'com.android.support:design:28.0.0'建好之后一直报关于28.00的错误,一开始各种百度更改配置没吊用,最后感觉是网络 ...

  8. springboot项目突然启动缓慢

    在项目快到最后的时候,有一次在本地启动项目的时候,突然发现项目启动起来特别的慢. 刚开始也不知道哪里出了问题,只能慢慢的查原因. springboot项目在debug模式下本来运行的挺快,后来某一天突 ...

  9. 软件工程1916|W(福州大学)_助教博客】助教总结

    2018年上个学期,我担任计算机专业软件工程实践课程的助教,因为有汪老师和她的两位优秀研究生担任助教,基本上没有让我做什么事,除了参加了几次课程答辩.我对于助教需要做的事情其实还是没什么概念的.这个学 ...

  10. Maven 报错:Compilation of Maven projects is supported only if external build is started from an IDE.

    Maven 报错: Error:Maven Resources Compiler: Maven project configuration required for module 'yourProje ...