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相关推荐

  1. 如何在线生成Word文档?一种极简,极强大的方法,支持图片表格等各种格式

    大家在日常工作中会遇到这样的情况,在线给数万人生成一个证书.成绩单什么的,而且要求保存为word文档让大家下载. 难道我们要去学习word的编码格式?难道要去找一个word读写库?太复杂了!我们其实只 ...

  2. word文档的生成以及echarts图片的插入

    word文档的生成以及echarts图片的插入 word文档的生成 pom.xml引入 代码流程-easy result 结语 word文档的生成 上一篇博客我们提到了echarts图片的生成过程!现 ...

  3. Word电子扫描仪 word文档转换为图片Pdf,Word文档扫描成Pdf,word文档加密 word转图片 word转pdf

    Word文档转换为图片Pdf,Word文档扫描成Pdf Word转换为图片Pdf 1.        Word转换为Pdf,程序很多,但转换后的Pdf,还可以复制,虽可以加密禁止复制,但市场上太多的P ...

  4. 验证win10下解决某些word文档提示”内存或磁盘空间不足”的几种方法

    验证win10下解决某些word文档提示"内存或磁盘空间不足"的几种方法 编者:李国帅 qq:9611153 微信lgs9611153 时间:2020-03-11 背景原因: 前段 ...

  5. 使用FreeMarker生成word文档(带图片),word转pdf,预览pdf,pdf下载工具类

    一.下载或配置: 下载jar包 :freemaker的jar包下载 下载jar包 :aspose-words的jar包下载 或者配置maven依赖: pom.xml添加aspose的依赖包(maven ...

  6. java word文档生成_java生成word文档

    java生成word文档有多种方式: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现 ...

  7. java实现导出doc文档

    之前只接触过导出excel,当然项目中总会有一些特殊要求,比如这次甲方爸爸要求导出word文档,代码来了. 项目使用的是pom进行管理的,dependency包括下面几个 <!-- doc -- ...

  8. mysql导出表结构word文档_如何将Word文档导出为长图片格式

    如何对word文档转化成潮图片格式呢?给大家分享一下,将word文档转化成图片具体方法,对大家能有所帮助. 方法/步骤 1 首先,如果想将word文档转化成图片格式文档,我们可以直接用word程序来实 ...

  9. java填充word文档_如何使Word文档可填充但不可编辑

    java填充word文档 If contracts are part of your daily workflow, you know how frustrating it is when peopl ...

最新文章

  1. 软件测试人员必备Linux命令(初、中、高级)
  2. JavaScript 的同源策略
  3. 使用NuGet下载旧版本的软件包
  4. 用python画太阳花-python 简单的绘图工具turtle使用详解
  5. POJ2752KMP逆序处理
  6. R-CNN 《Rich Feature Hierachies for Accurate Object Detection and Semantic Segmentation》论文笔记
  7. mac 下 使用 brew 配置 环境
  8. PostgreSQL 函数调试、诊断、优化 auto_explain
  9. 忽视大小写函数_使用率低但功能强大的6个Excel函数公式应用技巧解读!
  10. [深入学习Redis]RedisAPI的原子性分析
  11. 开课吧课堂之如何使用多重catch语句
  12. windows下重设mysql的root密码
  13. matlab求方差、均方值和功率
  14. 去除VScode中的蓝色波浪线
  15. PDF如何修改文件字体大小
  16. Selenium库实现推特爬虫
  17. JDK下载(jdk1.8下载与安装教程)
  18. gff文件_gff/gtf格式
  19. [iOS] objc_setAssociatedObject objc_getAssociatedObject 简单明了的一个理解
  20. Windows每五秒点击一次键盘保持不锁屏

热门文章

  1. 管理感悟:如何成为一名合格的管理者
  2. 32位和64位程序的区别
  3. Rails出现ROLLBACK TO SAVEPOINT active_record_1信息的解决
  4. JQuery之常用插件
  5. 5G NR标准 第4章 LTE概述
  6. .NetCore外国一些高质量博客分享
  7. 2008春晚,赵本山之《火炬手》(现场版最新完整台词)
  8. blackjack - pwnable
  9. 购物网站(内容页面)
  10. what is the power of self-discipline in our life?