编写:HorinJsor

文章目录

  • 一、Freemarker是什么?
  • 二、Word模板编写
    • 1.导出为xml格式文档
    • 在这里插入图片描述
    • 2.使用HBuilderX重排格式
    • 3.基本模板语法
  • 三、代码步骤
    • 1.引入依赖
    • 2.创建工具类
    • 3.创建Controller
    • 4.创建ServiceImpl
  • 总结

一、Freemarker是什么?

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。


二、Word模板编写

1.导出为xml格式文档


2.使用HBuilderX重排格式

注意:HBuilderX中,重排格式只支持html文件,只需要创建一个html文件,将模板xml内容复制进去重排即可。


3.基本模板语法

渲染单个值,不存在则不显示:

${user.userName}

条件判断,是否打✔:

<#if con.cyfl?number==1><w:r><w:rPr><w:rFonts w:cs="宋体" w:hint="eastAsia" /><w:kern w:val="0" /><w:szCs w:val="21" /></w:rPr><w:t>☑</w:t></w:r><#else><w:r><w:rPr><w:rFonts w:cs="宋体" w:hint="eastAsia" /><w:kern w:val="0" /><w:szCs w:val="21" /></w:rPr><w:t>□</w:t></w:r>
</#if>

循环List:

<#list xynf as x>
<w:tc>
<w:tcPr>
<w:tcW w:w=“2200” w:type=“dxa” />
<w:gridSpan w:val=“3” />
<w:vAlign w:val=“center” />
</w:tcPr>
<w:p w:rsidR=“00977961” w:rsidRDefault=“007F704D”>
<w:pPr>
<w:jc w:val=“center” />
<w:rPr>
<w:rFonts w:ascii=“黑体” w:eastAsia=“黑体” w:hAnsi=“黑体” w:cs=“黑体” />
<w:szCs w:val=“21” />
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:ascii=“黑体” w:eastAsia=“黑体” w:hAnsi=“黑体” w:cs=“黑体”
w:hint=“eastAsia” />
<w:szCs w:val=“21” />
</w:rPr>
<w:t>${x.xyyear!}</w:t>
</w:r>
</w:p>
</w:tc>
</#list>


三、代码步骤

1.引入依赖

<!-- freemarker --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version></dependency>

2.创建工具类

public class FileUtils {/*** 使用 freemarker 生成word文档  yes** @param templateDir  模板所在目录路径* @param templateName 模板 例如:xxx.ftl* @param data         数据* @param fileSavePath 文档生成后,存放的路径* @param filename     生成后的文件名称,使用英文* @param response* @throws Exception*/public static void freemarkerExport(String templateDir, String templateName, Map<String, Object> data, String fileSavePath, String filename, HttpServletResponse response) throws Exception {// 1.设置 freeMarker的版本和编码格式Configuration configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");// 2.设置 freeMarker生成Word文档,所需要的模板的路径configuration.setDirectoryForTemplateLoading(new File(templateDir));// 3.设置 freeMarker生成Word文档所需要的模板 ---> xxx.ftlTemplate t = null;try {t = configuration.getTemplate(templateName); // 模板文件名称} catch (IOException e) {throw new IOException("获取 ftl模板失败!" + e.getMessage());}// 4.生成 Word文档的全路径名称File outFile = new File(fileSavePath + filename);// 5.创建一个 Word文档的输出流Writer writer = null;try {writer = new OutputStreamWriter(new FileOutputStream(outFile), "utf-8");} catch (Exception e) {throw new Exception(e.getMessage());}try {// 6.装载数据t.process(data, writer);response.setCharacterEncoding("utf-8");response.addHeader("Content-Disposition", "attachment;filename=" + filename);response.setContentType("application/force-download");// 7.读取生成好的 Word文档File file = new File(fileSavePath + filename);FileInputStream is = new FileInputStream(file);OutputStream os = response.getOutputStream();byte[] b = new byte[1024];int length;while ((length = is.read(b)) > 0) {os.write(b, 0, length);}os.flush();os.close();writer.flush();writer.close();} catch (IOException e) {throw new IOException(e.getMessage());} finally {deleteTempFile(fileSavePath + filename);}}/*** 删除临时生成的文件*/public static void deleteTempFile(String filePath) {File f = new File(filePath);f.delete();}
}

3.创建Controller

@RestController
public class Controller {@Autowiredprivate ServiceImpl service;@PutMapping("/word/{tdpy}")public String wordExport(HttpServletResponse response, @PathVariable String tdpy) throws Exception {service.wordExport(response);return null;}

4.创建ServiceImpl

@Service
public class ServiceImpl {@Autowiredprivate UserService userService;public void wordExport(HttpServletResponse response) throws Exception {// 1.创建 mapMap<String,Object> data = new HashMap<>();// 2.创造静态数据,实际场景直接查数据库Map<String,Object> user = new HashMap<>();user.put("userName","用户名123"); user.put("userAge","年龄22"); user.put("userStatus","状态1"); data.put("user",user);System.out.println("数据总和输出:"+data);// 4.执行导出FileUtils.freemarkerExport("C:\\Users\\Horin Jsor\\Desktop\\学习测试代码demo\\MD5-Test\\src\\main\\resources\\templates","cq.ftl",data,"F:\\aTest","test.doc",response);}
}

总结

参考链接:
Java中使用freemarker教程之list循环
Freemarker word导出教程

Freemarker模板引擎:使用HashMap数据形式,导出word模板相关推荐

  1. SpringBoot导出word模板并动态渲染数据

    导出word模板并动态渲染数据 一.需求介绍 背景:需要导出word模板的时候,有些数据是动态或者图片等不确定因素的时候.根据需求定制好的模板要求填充数据,那么这个时候就需要进行根据word模板进行动 ...

  2. Freemarker使用mht制作导出word模板

    Freemarker使用mht制作导出word模板 一.制作word导出模板时,我们使用官方的Office Word编辑样式,编辑好之后,另存为mhtml格式,这样我们就可以看到源代码了.注意:创建w ...

  3. html页面增删改查模板,模板引擎+(实现数据增删改查小项目)

    art-template模板引擎: 在命令行工具中使用 npm install art-template 命令进行下载 使用const template = require('art-template ...

  4. poi导出word模板

    **poi导出word模板段落处理 流程: 1:读取文档:` //获取docx解析对象 XWPFDocument document = new XWPFDocument(POIXMLDocument. ...

  5. 利用docxtpl库将excel里的数据向一个word模板里填充数据,并保存为一个word文档

    ###程序功能说明:该功能是将excel里的数据向一个word模板里填充数据,并保存为一个word文档. from docxtpl import DocxTemplate import openpyx ...

  6. 如何在Python中将数据插入到Word模板中生成一份Word文档

    在一些的项目开发中,会有一些生成Word文件的操作,比如将获取到的一些数据添加到Word模板当中的相应的位置生成一份Word文档. 由于最近的Python项目当中需要将一些从服务器查出的数据添加到Wo ...

  7. java word模板替换多行_Java动态替换word模板的最佳实践

    poi-tl 基于word的模板渲染(替换)组件 对docx格式的文档增加模板语法,增加渲染模板的方便性,目前支持对段落.页眉.页脚.表格的文本.图片.表单渲染. 对于word模板替换,我们不仅要考虑 ...

  8. 【Java】poi-tl实现导出Word模板并动态渲染数据

    文章目录 前言 优点 缺点 使用 引入依赖 渲染普通占位符 表格渲染 前言 最近做项目的时候会遇到要求要导出以docx格式结尾的报告文件,于是我就在思考有没有一个比较好用的第三方类库能解决在word上 ...

  9. springboot+freemarker实现导出word模板

    freemarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个 ...

最新文章

  1. Kupu,“document-centric”的开放源码的客户端文本编辑器
  2. Android -- 多线程下载
  3. pytorch笔记:搭建简易CNN
  4. 【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
  5. Windows消息机制详解-2
  6. java 图像 截取正方形_响应但是作为img元素的正方形的图像
  7. 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(1)
  8. object转成实体对象_面向对象的TypeScript-序列化与反序列化(1)
  9. AGC018F. Two Trees
  10. 谨记这10条,就能给别人留下好印象?
  11. Docker 持续推动创新,三款应用为您指引未来趋势
  12. 使用Beyond Compare一类文件目录比较器时,要注意忽略的目录文件设置
  13. 计算机软考数据库怎么学,计算机软考数据库系统工程师学习笔记(二)
  14. 第1期:手把手教你制作网易邮箱注册页面
  15. 计算机自考毕业论文题目,自考男生发表数篇论文获专利 考取名校研究生
  16. AutoCAD Civil 3D-曲面-1、曲面创建
  17. Linux虚拟机连接外网
  18. GDOI2018 涛涛摘苹果 [CDQ分治]
  19. TFTLCD之FSMC详解
  20. linux 超级终端

热门文章

  1. RED HAT 认证学习资料:Chapter 1
  2. BioVendor 胆盐活化脂肪酶 NATIVE说明书
  3. 教你清理“没用的”缩略图临时缓存文件
  4. 易优cms修复后台编辑器下拉滚动条时跳动的BUG
  5. vue结合饿了么_vue高仿饿了么APP(一)
  6. 树莓派lite版开机注意事项
  7. apk android lite,APK提取器lite
  8. 信息学奥赛一本通 1272:【例9.16】分组背包
  9. Aruba 2930系列交换机使用非aruba厂商光模块
  10. Android 屏幕录屏,然后转为GIF图