java freemarker word_freemarker-word

本文档详细介绍了如何结合Java和Freemarker模板技术生成Office Word文档,包括配置Freemarker、创建数据模型、处理模板以及实现导出到本地或服务端下载的功能。同时提供了接口设计和实现的代码示例,方便开发者快速接入。
摘要由CSDN通过智能技术生成

freemarker-word

介绍

Java结合Freemarker模板技术生成office word 文档。并提供两种功能:

根据模板导出word到本地

根据模板响应到服务端,提供word下载

软件架构

Java、Freemarker、Fastjson

开发工具及依赖

IDEA-2017.2

freemarker-2.3.20.jar

fastjson-1.2.47.jar

commons-lang-2.5.jar

junit-4.10.jar

Freemarker模板简介

API: api

数据模型+模板=输出

首先,你应该创建一个 freemarker.template.Configuration 实例, 然后调整它的设置。Configuration 实例是存储 FreeMarker 应用级设置的核心部分。同时,它也处理创建和 缓存 预解析模板(比如 Template 对象)的工作。

不需要重复创建 Configuration 实例; 它的代价很高,尤其是会丢失缓存。Configuration实例就是应用级别的单例。因此Configuration需要设计成全应用单例模式。

创建数据模型

Map root 或者符合JavaBean规范具有getxxx()方法的对象

获取模板

从Configuration实例中获取Template实例Template temp = cfg.getTemplate("test.ftl");

Configuration 缓存 Template 实例,当再次获得 test.ftl 的时候,它可能再读取和解析模板文件了, 而只是返回第一次的 Template实例。

合并模板和数据模型

合并是由模板实例Template的process()完成的。

template.process(dataMap,out)

制作Freemarker模板(.ftl)

将word模板格式另存为.xml格式文档(注意:不是直接改文件后缀名,而是转为word .xml格式文档!)

使用在线xml格式工具,格式化word .xml中的xml内容后,直接修改后缀名为 .ftl

修改模板变量名 ${name}

${name}

早上好,今天是晴天!

数据模型

@Test

public void exportDoc() throws Exception {

IDocument IDocument = new FreemarkerService();

Map dataMap = new HashMap();

dataMap.put("name", "yacongliu");

String msg = IDocument.exportDoc(dataMap, "D:/test.doc");

System.out.println(msg);

}

文档效果

见 imgs 文件夹内图片

接口调用说明

设计IDocument 文档接口,定义文档操作方法:导出word到本地以及响应服务端提供下载。

/**

* 〈word 操作接口〉

* 〈.doc〉

*

* @author yacong_liu

* @create 2019/3/18

* @since 1.0.0

*/

package com.kingdee.shr.doc;

import javax.servlet.http.HttpServletResponse;

import java.util.Map;

public interface IDocument {

/**

* 导出word到本地

*

* @param dataMap 数据模型

* @param filePath 文件路径

* @return

*/

String exportDoc(Map, ?> dataMap, String filePath);

/**

* 导出word响应到服务端Response

*

* @param docName 文档名称

* @param dataMap 数据模型

* @param response HttpServletResponse

* @return

*/

String exportDoc(String docName, Map, ?> dataMap, HttpServletResponse response);

}

接口实现类com.kingdee.shr.doc.impl.FreemarkerService 进行具体的文档操作编码。

工厂类DocumentFactory 提供接口实例 采用静态工厂方法模式

/**

* Copyright (C), 2016-2019

* FileName: DocumentFactory

* Author: yacnog_liu

* Date: 2019/3/19 8:43

* Description: DocumentFactory

*

* 设计模式-静态工厂方法模式

*/

package com.kingdee.shr.doc;

import com.kingdee.shr.doc.impl.FreemarkerService;

public class DocumentFactory {

public static IDocument produceFreemarker() {

return new FreemarkerService();

}

}

接口调用示例

@Test

public void exportDocFactory() throws Exception {

IDocument IDocument = DocumentFactory.produceFreemarker();

Map dataMap = new HashMap(2);

dataMap.put("name", "yacong_liu");

String msg = IDocument.exportDoc(dataMap, "D:/test.doc");

System.out.println(msg);

}

参与贡献

Fork 本仓库

新建 Feat_xxx 分支

提交代码

新建 Pull Request

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值