当前位置: 首页 > news >正文

java用freemarker导出word

freemarker导出word

      • 第一步、将word转换为xml格式
      • 第二步、将转换后的xml文件修改后缀为ftl后复制到项目 resources 目录下(可以自己新建一个文件夹放在文件夹中)
      • 第三步、格式化xml代码(如果问价太大可能会无法格式化)这时候需要在idea中进行设置
      • 第四步、ftl文件值的替换
      • 第五步、工具类
      • POM

第一步、将word转换为xml格式

第二步、将转换后的xml文件修改后缀为ftl后复制到项目 resources 目录下(可以自己新建一个文件夹放在文件夹中)

第三步、格式化xml代码(如果问价太大可能会无法格式化)这时候需要在idea中进行设置

在这里插入图片描述
idea.max.intellisense.filesize=10000
idea.max.content.load.filesize=10000

第四步、ftl文件值的替换

${monthLowerALL!} 表示替换单个值遍历数组
<#list userList as user>编号:${user.id} 姓名:${user.username} ${user.age}<br/>
</#list>

第五步、工具类

@Slf4j
public class FreemarkerUtil {/*** 使用 Freemarker 生成 Word 文件** @param templateName 模板文件路径名称* @param fileName     生成的文件路径以及名称* @param dataModel    填充的数据对象*/public static void exportWord(String templateName, String fileName, Map<String, Object> dataModel) {generateFile(templateName, fileName, dataModel);}/*** 使用 Freemarker 生成指定文件返回流** @param templateName 模板文件路径名称* @param fileName     生成的文件名称* @param dataModel    填充的数据对象*/private static void generateFile(String templateName, String fileName, Map<String, Object> dataModel) {try {// 1、创建配置对象Configuration config = new Configuration(Configuration.VERSION_2_3_30);config.setDefaultEncoding("utf-8");//这里 templates 为你项目中resources目录下templates文件夹,相当于会拼接在你的 templateName参数前面config.setClassForTemplateLoading(FreemarkerUtil.class, "/templates");// 2、获取模板文件Template template = config.getTemplate(templateName, "utf-8");HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();response.setContentType("application/msword;charset=utf-8");response.setCharacterEncoding("utf-8");try {response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1") + ".docx");} catch (UnsupportedEncodingException e) {e.printStackTrace();}template.process(dataModel, response.getWriter());} catch (Exception e) {e.printStackTrace();}}
}

###第六步、调用

 Map<String, Object> dataMap = Maps.newConcurrentMap();dataMap.put("totalIncomeAll", "123456789++");dataMap.put("monthLowerALL", "1960");// 执行导出FreemarkerUtil.exportWord("templates路径下对应的模板名称.ftl", "导出的模板名称", dataMap);

POM

<!-- 文档模板操作依赖 --><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.core</artifactId><version>2.0.2</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.document</artifactId><version>2.0.2</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.template</artifactId><version>2.0.2</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.document.docx</artifactId><version>2.0.2</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId><version>2.0.2</version></dependency>
http://www.lryc.cn/news/403159.html

相关文章:

  • CH01_WPF概述
  • 秒懂设计模式--学习笔记(11)【结构型-享元模式】
  • Python爬虫——1爬虫基础(一步一步慢慢来)
  • 【js自学打卡9】抛出异常 / 幂计算 / 发布订阅 / map小知识点
  • ArcGIS Pro SDK (九)几何 7 多点
  • 服务器注意事项
  • 学生信息管理系统设计
  • Python求均值,方差,标准差
  • DDei在线设计器-HTML渲染
  • 【React Hooks原理 - useSyncExternalStore】
  • C++STL初阶(7):list的运用与初步了解
  • el-menu弹出菜单样式不生效
  • Springboot 3.x - Reactive programming (2)
  • WPF+Mvvm 项目入门完整教程(一)
  • [解决方法]git上传的项目markdown文件的图片无法显示
  • 【React】使用 antd 加载组件实现 iframe 的加载效果
  • Python爬虫(1) --基础知识
  • 云原生系列 - Jenkins
  • django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出
  • 计算机网络入门 -- 常用网络协议
  • 【LabVIEW作业篇 - 4】:属性节点赋值和直接节点赋值的区别体现
  • 【数据库系列】Parquet 文件介绍
  • A Survey on Multimodal Large Language Models综述
  • Leetcode3208. 交替组 II
  • 汇编教程2
  • 使用 git 和 GitHub 互动
  • 【Spring Boot 中的 `banner.txt` 和 `logback-spring.xml` 配置】
  • Python Linux环境(Centos8)安装minicoda3+jupyterlab
  • Python PDF Magic:合并和拆分随心所欲
  • Gmsh应用程序编程接口