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>
相关文章:
java用freemarker导出word
freemarker导出word 第一步、将word转换为xml格式第二步、将转换后的xml文件修改后缀为ftl后复制到项目 resources 目录下(可以自己新建一个文件夹放在文件夹中)第三步、格式化xml代码(如果问价太大可能会无法格式化)这时候需要在…...
CH01_WPF概述
第1章:WPF概述 本章目标 了解Windows图形演化了解WPF高级API了解分辨率无关性概念了解WPF体系结构了解WPF 4.5 WPF概述 欢迎使用 Windows Presentation Foundation (WPF) 桌面指南,这是一个与分辨率无关的 UI 框架,使用基于矢量的呈现引…...
秒懂设计模式--学习笔记(11)【结构型-享元模式】
目录 10、享元模式10.1 享元模式10.2 举例10.2.1 马赛克10.2.2 游戏地图(以草原地图作为范例) 10.3 总结 10、享元模式 10.1 享元模式 “享元”则是共享元件的意思享元模式的英文flyweight是轻量级的意思,这就意味着享元模式能使程序变得更…...
Python爬虫——1爬虫基础(一步一步慢慢来)
一、爬虫是什么? (spider) Python 爬虫是利用编程语言 Python 来获取互联网上的数据的技术。它可以自动化地访问网页、提取信息并进行数据处理。以下是Python爬虫的基础知识和步骤: 主要特点和功能: 自动化浏览&#…...
【js自学打卡9】抛出异常 / 幂计算 / 发布订阅 / map小知识点
1. 抛出异常的写法 抛出一个简单的字符串错误 throw Error2; // 抛出一个字符串抛出一个Error对象 throw new Error(出错了!);抛出一个自定义错误对象 function UserError(message) {this.message message;this.name "UserError"; } throw new User…...
ArcGIS Pro SDK (九)几何 7 多点
ArcGIS Pro SDK (九)几何 7 多点 文章目录 ArcGIS Pro SDK (九)几何 7 多点1 构造多点 - 从映射点的枚举2 构造多点 - 使用 MultipointBuilderEx3 修改多点的点4 从多点检索点、2D 坐标、3D 坐标 环境:Visual Studio 2…...
服务器注意事项
1. 远程服务器不允许关机,只能重启; 2. 重启服务器应关闭服务; 3. 不要在服务器访问高峰运行高负载命令; 4. 远程配置防火墙是不要把自己踢出服务器; 5. 制定合理的密码规范并定期更新; 6. 合理分配权…...
学生信息管理系统设计
学生信息管理系统的设计是一个综合性的项目,涉及到数据的存储、检索、更新和删除等基本操作,同时也需要考虑系统的易用性、安全性和扩展性。以下是一些关键步骤和要素,用于指导设计这样一个系统: 1. 需求分析 目标用户ÿ…...
Python求均值,方差,标准差
参考链接:变异系数(Coefficient of Variation,COV)和协方差(Covariance, Cov)-CSDN博客 参考链接:pandas中std和numpy的np.std区别_numpy pandas std-CSDN博客 在计算蛋白质谱数据中的每个蛋白对应的变异…...
DDei在线设计器-HTML渲染
Html渲染 HtmlViewer插件通过将一个外部DIV附着在图形控件上,从而改变原有图形的显示方式。允许使用者自己定义HTML通过HTML元素。本示例演示了通过Html来扩展渲染图形,从而获得更加丰富的图形展现。 通常情况下,我们创建的图形控件ÿ…...
【React Hooks原理 - useSyncExternalStore】
概述 在React项目中说到状态管理,我们第一时间想到的就是使用useState、useReducer这种Hooks来进行状态管理。但是这种是针对React内部的状态,如果有时候我们需要订阅外部的状态并影响React组件的更新的话,那通过这种内部状态管理API显然不能…...
C++STL初阶(7):list的运用与初步了解
在了解了vector之后,我们只需要简单学习List与vector不一样的接口即可 1.list的基本接口 1.1 iterator list中,与vector最大的区别就是迭代器由随机迭代器变成双向迭代器 string和vector中的迭代器都是随机迭代器,支持-等,而LIS…...
el-menu弹出菜单样式不生效
1. 使用 ruoyi 项目时出现的问题。 <template><el-menu:default-active"activeMenu":collapse"false":unique-opened"true"class"container":collapse-transition"true"mode"horizontal"><sideba…...
Springboot 3.x - Reactive programming (2)
三、WebFlux Blocking Web vs. Reactive Web Blocking Web (Servlet) and Reactive Web (WebFlux) have significant differences in several aspects. 1. Front Controller Servlet-Blocking Web: Uses DispatcherServlet as the front controller to handle all HTTP req…...
WPF+Mvvm 项目入门完整教程(一)
WPF+Mvvm 入门完整教程一 创建项目MvvmLight框架安装完善整个项目的目录结构创建自定义的字体资源下载更新和使用字体资源创建项目 打开VS2022,点击创建新项目,选择**WPF应用(.NET Framework)** 创建一个名称为 CommonProject_DeskTop 的项目,如下图所示:MvvmLight框架安装…...
[解决方法]git上传的项目markdown文件的图片无法显示
应该有不少初学者会遇到这种情况 以下是本人摸索出的解决方法 我使用的是typora,首先设置typora的图片设置 文件>偏好设置>图像 如下: 选择这个就会在此文件的同级目录下创建一个assets文件夹来存放此markdown文件的所有图片 然后勾选优先使用相…...
【React】使用 antd 加载组件实现 iframe 的加载效果
文章目录 代码实现: import { Spin } from antd; import { useState } from react;export default function () {const [loading, setLoading] useState(true);return (<div style{{ position: relative, height: 100% }}><Spinstyle{{ position: absolu…...
Python爬虫(1) --基础知识
爬虫 爬虫是什么? spider 是一种模仿浏览器上网过程的一种程序,可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…...
云原生系列 - Jenkins
Jenkins Jenkins,原名 Hudson,2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。 官方网站(英文):https://www.jenkins.io/ 官方网站(中文):https://www.jenkins.io…...
django踩坑(四):终端输入脚本可正常执行,而加入crontab中无任何输出
使用crontab执行python脚本时,有时会遇到脚本无法执行的问题。这是因为crontab在执行任务时使用的环境变量与我们在终端中使用的环境变量不同。具体来说,crontab使用的环境变量是非交互式(non-interactive)环境变量,而终端则使用交互式(inter…...
计算机网络入门 -- 常用网络协议
计算机网络入门 – 常用网络协议 1.分类 1.1 模型回顾 计算机网络细分可以划为七层模型,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而上三层可以划为应用层中。 1.2 分类 1.2.1 应用层 为用户的应用进程提供网络通信服务࿰…...
【LabVIEW作业篇 - 4】:属性节点赋值和直接节点赋值的区别体现
文章目录 属性节点赋值和直接节点赋值的区别体现 属性节点赋值和直接节点赋值的区别体现 创建5个圆形指示灯,然后循环点亮,先给圆形指示灯赋值假变量,然后再进行循环。 运行结果,观察结果,发现刚开始运行时࿰…...
【数据库系列】Parquet 文件介绍
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
A Survey on Multimodal Large Language Models综述
论文题目:A Survey on Multimodal Large Language Models 论文地址:https://arxiv.org/pdf/2306.13549 话题:多模态LLMs综述 MLLMs Paper: https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models 1. 摘要 近期,以GPT-4V为代表的跨模态大型语言模型(MLLM…...
Leetcode3208. 交替组 II
Every day a Leetcode 题目来源:3208. 交替组 II 解法1:环形数组 把数组复制一份拼接起来,和 3101 题一样,遍历数组的同时,维护以 i 为右端点的交替子数组的长度 cnt。 如果 i ≥ n 且 cnt ≥ k,那么 i…...
汇编教程2
本教程主要教大家如何安装32位Linux虚拟机,为后续实验拆炸弹做准备 下载系统映像文件 以Ubuntu14.04.6系统为例 官方网站:下载地址 点击下载图中32位系统 如果官网进不去可以使用镜像网站 清华镜像网站:下载地址 进入之后找到下图中链接…...
使用 git 和 GitHub 互动
本文根据《GitHub入门与实践》整理 创建账户 要想使用GitHub那就必须先有GitHub账号,账号自行注册,不作介绍。 本地生成 SSH Key SSH 提供了一种安全的方式来通过不安全的网络进行通信。当你使用SSH key连接到GitHub时,你的身份是通过密钥对(一个公钥和一个私钥)来验…...
【Spring Boot 中的 `banner.txt` 和 `logback-spring.xml` 配置】
文章目录 一、banner.txt1. 创建自定义 banner.txt2. 配置 banner.txt 的内容 二、logback-spring.xml1. 创建 logback-spring.xml2. 配置 logback-spring.xml 一、banner.txt banner.txt 是 Spring Boot 项目启动时显示的自定义横幅内容。用来展示项目名称、版本信息或者其他…...
Python Linux环境(Centos8)安装minicoda3+jupyterlab
文章目录 安装miniconda安装python环境启动 最近服务器检查,我下面的服务器有漏洞,不得已重装了,正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版,就是管理python环境的得力助手。 # 创建一个名…...
Python PDF Magic:合并和拆分随心所欲
大家好!小编今天要为大家带来一篇关于Python操作PDF的秘籍——无论是要将PDF合并成一份整体,还是将一个庞大的PDF文件拆分成多个小伙伴,都轻松hold住!你准备好了吗?让我们开始这场奇妙的PDF操作之旅吧! 准…...
电子商务网站建设的规划/网站推广宣传语
1. 为什么将 View 从别处粘贴进另一个View后无法添加约束? 在 Size 面板中将 Layout 属性改为 Inferred(Constraints)。此外,当一个 view 下面没有 Constraints 时,无法将别的 view 拖进这个 view。你可以从 Library 中随便拖一个控件到这个…...
wordpress 微博侧边栏/正规电商培训学校排名
问: 我用的是vc2008 express版。 自己写了一个服务功能的lib,在一个客户程序中要调用我自己写的这个lib。无论lib还是客户端程序都是非mfc的,只用到了最基本的win32程序框架和opengl库。 在本机可以运行,使用MTD方式编译后ÿ…...
思茅网站建设/数字营销成功案例
1:知识点1:在定义一个类时,我们可以显式或隐式的定义在此类型的对象拷贝、赋值、移动、销毁是做什么,主要通过五种特殊的成员函数来完成这些操作:拷贝构造函数、拷贝复制运算符、移动构造函数、移动复制运算符。析构函数 知识点2:拷贝和移动构造函数定义了当用同类型的一…...
百度bae wordpress 3.8.1/培训课程名称大全
前情提要: 接着上一节的.stark自创组件的展示效果编写 展示数据 一:按照默认自带数据展示 即无一对一,一对多 1:先获取queryset对象 2:获取当前操作模型表对象数据 注意:list_display 为元祖,这样如果默认样式的时候会反射第一个索引所在的位置即 "__str__" 2>1视…...
建定制营销型网站/互联网营销师证书
CentOS7 特点总结CentOS7 特点总结1.runlevel/etc/inittab 中开启启动模式已失效,但还可以通过命令 init 0/1/2/3/4/5/6进行设置7版本中更新为systemctl set-default graphical.target (设置图形界 启动),实际是在/etc/systemd/system/ 目录下创建指向/u…...
百色网站建设/优化设计七年级下册语文答案
有限单群(有限群G只有两个平凡的正规子群,定义和素数很像) 当G的子群H是正规子群时,则可考虑G模H的商群,H不是正规子群做商只能得到陪集,不是群 G为有限交换群: 则G是单群iff G的阶为P (结合之前的结论素数阶群一定是…...