freemarker 简介:

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

Word 转换为ftl 文件

找到Word模板文件,将文件另存为*xml 格式

修改xml 文件,添加freemarker 的占位符

项目编码流程:

1、添加相关依赖

2、编写相关工具类

pom.xml 文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zzg</groupId><artifactId>common-func</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><!--集成freemarker --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency><!--集成 commons-codec 加密 --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency></dependencies>
</project>
package com.zzg.freemarker.entity;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.Map;import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;public class TemplateEntity {// ftl 包路径private String ftlPackagePath;// ftl 文件名称private String ftlFileName;private Configuration configuration = null;private Template template = null;// get 和 set 方法public String getFtlPackagePath() {return ftlPackagePath;}public void setFtlPackagePath(String ftlPackagePath) {this.ftlPackagePath = ftlPackagePath;}public String getFtlFileName() {return ftlFileName;}public void setFtlFileName(String ftlFileName) {this.ftlFileName = ftlFileName;}public TemplateEntity(String ftlPackagePath,String ftlFileName) {this.ftlPackagePath = ftlPackagePath;this.ftlFileName = ftlFileName;// freemarker 模板配置对象configuration = new Configuration();// 设置编码格式: utf-8configuration.setDefaultEncoding("utf-8");// 设置ftl 文件目录configuration.setClassForTemplateLoading(TemplateEntity.class, this.ftlPackagePath);// 设置ftl 文件try {template = configuration.getTemplate(this.ftlFileName);} catch (IOException e) {e.printStackTrace();}}public void createTemplate(Map data, String docFileName){File file = new File(docFileName);if(file.exists()){try {file.createNewFile();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}try {Writer writer = new OutputStreamWriter(new FileOutputStream(file),"utf-8");template.process(data, writer);writer.close();} catch (UnsupportedEncodingException | FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (TemplateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
package com.zzg.util;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;import org.apache.commons.codec.binary.Base64;public class Base64Util {/*** * @Title: getEncodeValue   * @Description: 根据指定图片路径,获取Base64.encode的值  * @param: @param imagePath* @param: @return      * @return: String      * @throws*/public static String getEncodeValue(String imagePath){String content = null;InputStream in = null;byte[] data = null;try {in = new FileInputStream(imagePath);data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {e.printStackTrace();}content = Base64.encodeBase64String(data);return content;}}

测试:

package com.zzg.freemarker.test;import java.util.HashMap;
import java.util.Map;import com.zzg.freemarker.entity.TemplateEntity;
import com.zzg.util.Base64Util;public class FreemarkerTest {public static void main(String[] args) {// TODO Auto-generated method stub// 图片数据String imageContent = Base64Util.getEncodeValue("C:\\image\\1.png");// 数据组装Map<String,Object> map = new HashMap<String,Object>();map.put("imageurl", imageContent);map.put("name", "zhouzhiwengang");map.put("time", "2019-04-03");map.put("factory", "深圳富士康");map.put("product", "苹果电脑");map.put("price", "8999");map.put("num", "十万台");// 构建模板引擎实体对象TemplateEntity entity = new TemplateEntity("/com/zzg/ftl","template.ftl");String docFileName = "C:\\image\\测试模板.doc";entity.createTemplate(map, docFileName);}}

项目结构图:

源码地址:待补充

freemarker 生成基于Word 模板的Word文档相关推荐

  1. Freemarker + flying-saucer-pdf 基于IText2.17实现HTML文档转换成PDF

    一.引入依赖 <dependency><groupId>org.freemarker</groupId><artifactId>freemarker&l ...

  2. 用word模板导出word文档

    项目需求要把页面上的分析结果导出为word文档,实现的办法是POI.查了一下网上很多方式都采用FreeMark,自己认为比较麻烦,所以还是采取了POI导出.之前的框架是SSH的,现在换成了Spring ...

  3. Java 使用word模板创建word文档报告教程

    上面是java 利用word模板生成的一个word报告文档,利用的是第三方类库Poi-tl 是实现的. poi-tl是一个基于Apache POI的Word模板引擎,也是一个免费开源的Java类库,你 ...

  4. docx4j操作word文档之生成页码、合并多个文档

    docx4j操作word文档: 动态生成表格行数并填充数据 单元格内填充图片 合并多个word文档(包含页码,纸张方向等等) 1.动态生成表格行数并填充数据 首先创建模板文件.docx,如图: 代码如 ...

  5. 亿愿Word文档批量多语言翻译---word文档翻译专家!几十种语言随意快速互译!可以生成中外文,中英文对照内容文档!

    亿愿Word文档批量多语言翻译-软件功能简介 [亿愿Word文档批量多语言翻译]采用目前最强大的.国际著名公司的谷歌翻译引擎,自动识别语言种类,把英文.日文.韩文.德文.法文.俄文等几十种外国语言的文 ...

  6. 利用freemarker生成带fusioncharts图片的word简报

    /**  * 利用freemarker生成带fusioncharts图片的word简报  *         烟台海颐软件技术论坛  *         作者  牟云飞 新建 *         毕业 ...

  7. Java支持latex,基于Java和LaTeX的文档自动生成技术研究

    基于Java和 LaTeX 的文档 自动生成技术研究 ◆尚宝欣 徐 屹 (东北电力大学理学院,吉林 长春 132012) [摘 要]讨论了结合Java与LaTex 自动生成 PDF文档的方法.针 展名 ...

  8. java docx文档解析_带有docx4j的Java Word(.docx)文档

    java docx文档解析 几个月前,我需要创建一个包含许多表和段落的动态Word文档. 过去,我曾使用POI来实现此目的,但是我发现它很难使用,并且在创建更复杂的文档时对我来说效果不佳. 因此,对于 ...

  9. 关于最近word模板以及word转pdf的总结

    主要的学习和踩坑 word模板1类型只有文字的只要用这种方式实现非常好,没有图片的word模板;特别注意的是支持.doc的模板 2 第二种带图片的word模板,只支持 docx的 4 word转pdf ...

  10. poi-tl,根据word模板导出word(表格行循环,表格无表头的情况)

    最近项目里要做一个根据客户提供的word模板导出word的功能,方法有很多,比如easyPoi(对word的支持并不是很好),freeMark(太麻烦不想研究),以及poi-tl, 最后研究了半天发现 ...

最新文章

  1. 暑期集训1:C++STL 练习题B:HDU-1004
  2. laravel php跨域请求,laravel开发中跨域的解决方案
  3. 数组拷贝问题的解决方法
  4. 每日一皮:当我在重构时,总是有惊喜出现.......
  5. windows下查看当前进程,杀掉进程等
  6. 优化DOTTEXT之二:缓存用户控件
  7. 信息系统项目管理师论文指导3/3
  8. 硬盘安装Fedora16
  9. c语言不定长数组_学习C语言这三块“硬骨头”不搞定学了也是白学
  10. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集
  11. Java笔记-通过注解和插件自动生成get/set和toString方法,使代码结构清晰
  12. 【杂文】【IDEA】IDEA项目设置为maven并运行
  13. java import list_Java中的List集合
  14. 设计模式讲解2:static proxy和decorator的不同点
  15. 实现点击页面报表头某个字段进行该字段的重新排序: 经过验证,此代码是工作的...
  16. 皮尔逊、斯皮尔曼、肯德尔相关系数
  17. EasyExcel ExcelGenerateException: The index of 'xx' and 'xx' must be inconsistent
  18. Server报错:“Starting Tomcat v9.0 Server at localhost` has encountered a problem”(已解决)
  19. matlab电影,如何制作电影(与matlab相关)?
  20. python 虚拟mac地址_随机生成MAC地址的N种方法

热门文章

  1. pandas drop 方法
  2. 微软鼠标用了半年,感谢鼠标滚轮用起来有点费劲了,看来应证了,老赵说了鼠标是消耗品,再好的鼠标三年也得换了...
  3. 女神节 | 程序员小姐姐把这份巧克力,送给你
  4. Python 学习 02 —— Python如何爬取数据
  5. 我的编程之路(二十八) 回首2014
  6. Redis分布式锁浅析
  7. 一拖二服务器硬件,电脑一拖二怎么配置 电脑一拖二配置方法【教程介绍】
  8. 【WY】数据分析 — Pandas 阶段一 :基础语法 八 —— 函数汇总
  9. java最大子序列和问题_一文看懂《最大子序列和问题》(内含Java,Python,JS代码)...
  10. CGB2103-day06