Java+freemarker 导出Word文档的实现(包括word for Mac 插入域的方法)-静态数据,动态表格list
1. 准备环境
1.1 word版本:MacOS系统下的Office360
word for Mac下好多操作和win的不一样啊啊啊,差点栽在Mac word的模版设计上。
win版本的word模版设计请参考文章:点此参考原文章
1.2 开发环境
开发语言:Java 8
开发工具:idea
第三方依赖:XDocReport、POI、Freemarker
模版语言:Freemarker
2. Word模版设计
2.1 示例目标word模版
2.2 word模版制作-插入域
将需要动态写入的内容用word域框起来。
1. 普通字段插入
word域(Mac版)插入方式如下:
2. 表格类型(列表)域插入
遍历列表输出,需要将域代码设置为${集合.字段名}
,如${repayment.payDate}
,${repayment.interest}
。
2.3 替换所有需要填充域的内容
接下来将所有内容替换为域代码
2.4 模版导出
将设置好的word模版导出为xml格式。
注意,如果有list数据,需要在导出的xml模版里再加入两行代码:
3. Java代码
3.1 引入依赖
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.7</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.1</version></dependency><dependency><groupId>org.jxls</groupId><artifactId>jxls</artifactId><version>2.6.0</version><exclusions><exclusion><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.jxls</groupId><artifactId>jxls-poi</artifactId><version>1.2.0</version></dependency><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><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>RELEASE</version><scope>compile</scope></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>RELEASE</version><scope>compile</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>compile</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
3.2 编写导出文档代码
/*** 使用FreeMarker自动生成Word文档** @param dataMap 生成Word文档所需要的数据,将文档中的域代码的名字,作为param的key,对应变量的数据为value* @param fileName 生成Word文档的全路径名称*/public static void generateWord(Map<String, Object> dataMap, String fileName, String templatePath, String template) throws Exception {// 设置FreeMarker的版本和编码格式Configuration configuration = new Configuration(new Version("2.3.23"));configuration.setDefaultEncoding("UTF-8");// 设置FreeMarker生成Word文档所需要的模板的路径configuration.setDirectoryForTemplateLoading(new File(templatePath));// 设置FreeMarker生成Word文档所需要的模板Template t = configuration.getTemplate(template, "UTF-8");// 创建一个Word文档的输出流Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(fileName)), "UTF-8"));//FreeMarker使用Word模板和数据生成Word文档t.process(dataMap, out);out.flush();out.close();}
3.3 测试
@Testpublic void test() throws Exception {FinancialHelperServiceImpl financialHelperService = new FinancialHelperServiceImpl();List<RepaymentVo> repayments = financialHelperService.getInterestPlan(1000000,4,36,LocalDate.now(),3,0,0);repayments.forEach(System.out::println);Map<String, Object> params = new HashMap<>();params.put("repayments", repayments);params.put("amount",100);params.put("rate",6);params.put("duration",40);params.put("conStart","2022-05-01");params.put("methodOfRepayment",1);params.put("totalInterest", 110);String fileName="test.doc";generateWord(params, "src/main/resources/templates/" + fileName, "src/main/resources/templates/", "还款计划模版.xml");}
3.4 测试结果
Java+freemarker 导出Word文档的实现(包括word for Mac 插入域的方法)-静态数据,动态表格list相关推荐
- 如何在线生成Word文档?一种极简,极强大的方法,支持图片表格等各种格式
大家在日常工作中会遇到这样的情况,在线给数万人生成一个证书.成绩单什么的,而且要求保存为word文档让大家下载. 难道我们要去学习word的编码格式?难道要去找一个word读写库?太复杂了!我们其实只 ...
- word文档的生成以及echarts图片的插入
word文档的生成以及echarts图片的插入 word文档的生成 pom.xml引入 代码流程-easy result 结语 word文档的生成 上一篇博客我们提到了echarts图片的生成过程!现 ...
- Word电子扫描仪 word文档转换为图片Pdf,Word文档扫描成Pdf,word文档加密 word转图片 word转pdf
Word文档转换为图片Pdf,Word文档扫描成Pdf Word转换为图片Pdf 1. Word转换为Pdf,程序很多,但转换后的Pdf,还可以复制,虽可以加密禁止复制,但市场上太多的P ...
- 验证win10下解决某些word文档提示”内存或磁盘空间不足”的几种方法
验证win10下解决某些word文档提示"内存或磁盘空间不足"的几种方法 编者:李国帅 qq:9611153 微信lgs9611153 时间:2020-03-11 背景原因: 前段 ...
- 使用FreeMarker生成word文档(带图片),word转pdf,预览pdf,pdf下载工具类
一.下载或配置: 下载jar包 :freemaker的jar包下载 下载jar包 :aspose-words的jar包下载 或者配置maven依赖: pom.xml添加aspose的依赖包(maven ...
- java word文档生成_java生成word文档
java生成word文档有多种方式: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...
- java实现导出doc文档
之前只接触过导出excel,当然项目中总会有一些特殊要求,比如这次甲方爸爸要求导出word文档,代码来了. 项目使用的是pom进行管理的,dependency包括下面几个 <!-- doc -- ...
- mysql导出表结构word文档_如何将Word文档导出为长图片格式
如何对word文档转化成潮图片格式呢?给大家分享一下,将word文档转化成图片具体方法,对大家能有所帮助. 方法/步骤 1 首先,如果想将word文档转化成图片格式文档,我们可以直接用word程序来实 ...
- java填充word文档_如何使Word文档可填充但不可编辑
java填充word文档 If contracts are part of your daily workflow, you know how frustrating it is when peopl ...
最新文章
- 软件测试人员必备Linux命令(初、中、高级)
- JavaScript 的同源策略
- 使用NuGet下载旧版本的软件包
- 用python画太阳花-python 简单的绘图工具turtle使用详解
- POJ2752KMP逆序处理
- R-CNN 《Rich Feature Hierachies for Accurate Object Detection and Semantic Segmentation》论文笔记
- mac 下 使用 brew 配置 环境
- PostgreSQL 函数调试、诊断、优化 auto_explain
- 忽视大小写函数_使用率低但功能强大的6个Excel函数公式应用技巧解读!
- [深入学习Redis]RedisAPI的原子性分析
- 开课吧课堂之如何使用多重catch语句
- windows下重设mysql的root密码
- matlab求方差、均方值和功率
- 去除VScode中的蓝色波浪线
- PDF如何修改文件字体大小
- Selenium库实现推特爬虫
- JDK下载(jdk1.8下载与安装教程)
- gff文件_gff/gtf格式
- [iOS] objc_setAssociatedObject objc_getAssociatedObject 简单明了的一个理解
- Windows每五秒点击一次键盘保持不锁屏