Java使用ftl模板文件生成Word

一、写在前面

最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊。
https://blog.csdn.net/weixin_43238452/article/details/109636200?spm=1001.2014.3001.5501
下面介绍一下应用场景:这次项目依旧是springboot项目,使用ftl模版生成的word文件。比上一版相比更加灵活而且实用性更高,还可插入base64图片进行展示
关于ftl模板我会简单介绍一下使用的心得,其实也是一些标签而已,熟悉以后操作起来也比较快

二、word转ftl模板,ftl标签简单介绍

1.找到使用的word模板(如图是我自己编写的一个word模板,后续会以此进行操作)

2.左上角点击另存为xml文件

3.直接将保存的xml文件改后缀名为 ftl 然后放到项目 resources/static 目录下。进去之后idea会自动格式化,如果没有,建议按ctrl+f搜索对应的汉字进行定位(注:模板必须在static目录下,改个英文名防止乱码)

4.标签及语法

(1)替换标签可以是对象点属性也可以是单个变量

(2) 循环标签,如图会根据list的大小进行循环赋值

(3)判断标签如图,第一个为判断cks遍历下标是否大于5,第二层为判断cks是否拥有下一个数据

5.代码编写

1.导入maven依赖,freemarker和word工具类依赖aspose-words,后者可点击下载,下载jar包后自行打入maven仓库,我是直接导入的依赖坐标
      <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId></dependency><dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-words</artifactId><version>22.10</version></dependency>
2.模板替换工具类

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
/*** * @param dataMap 存储数据的map集合* @param savePath 生成word保存路径*/public static void ftl2Word(Map<String, Object> dataMap, String savePath) {try {Configuration configuration = new Configuration(new Version("2.3.0"));configuration.setDefaultEncoding("utf-8");//.ftl配置文件所在路径Template template = configuration.getTemplate("demo.ftl", "utf-8");/*File file = new File("resources/static");String absolutePath = file.getAbsolutePath();*///上面获取路径有bug,absolutePath 既存demo.ftl的路径,不包含demo.ftl// 如:D:\IdeaProjectsTwo\beauty-master\beauty-main\src\main\resources\staticconfiguration.setDirectoryForTemplateLoading(new File(absolutePath));//输出文档路径及名称File outFile = new File(savePath);Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"), 10240);template.process(dataMap, out);out.close();} catch (Exception e) {e.printStackTrace();}}
3.word工具类
/*** @Author: SongTiankai* @Description: word工具类* @Date: 2022/12/9 19:34* @Version: 1.0*/
public class WordUtil {/*** @Description: 验证aspose.word组件是否授权:无授权的文件有水印标记*/public static boolean isWordLicense() {boolean result = false;try {String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";ByteArrayInputStream inputStream = new ByteArrayInputStream(s.getBytes());com.aspose.words.License license = new com.aspose.words.License();license.setLicense(inputStream);result = true;} catch (Exception e) {e.printStackTrace();}return result;}public static void word2pdf(String docPath, String savePath) {try {String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());License license = new License();license.setLicense(is);com.aspose.words.Document document = new com.aspose.words.Document(docPath);document.save(new FileOutputStream(new File(savePath)), SaveFormat.PDF);} catch (Exception e) {e.printStackTrace();}}public static void word2Image(String docPath, String savePath) {try {String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());License license = new License();license.setLicense(is);com.aspose.words.Document document = new com.aspose.words.Document(docPath);document.save(new FileOutputStream(new File(savePath)), SaveFormat.PNG);} catch (Exception e) {e.printStackTrace();}}}

6.工具测试

1.测试代码
@ApiOperation("word测试接口")@PostMapping("/testCreat")public ResultData testCreat() {Map<String, Object> dataMap = new HashMap<>();dataMap.put("ckd", "生产一车间");dataMap.put("llrq", DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));dataMap.put("llbm", "领料部");dataMap.put("kgy", "王武");dataMap.put("zg", "占山");dataMap.put("llr", "里斯");WordUtil.ftl2Word(dataMap, "D:\\home\\word\\ckd.doc");WordUtil.word2Image("D:\\home\\word\\ckd.doc", "D:\\home\\word\\ckd.png");WordUtil.word2pdf("D:\\home\\word\\ckd.doc", "D:\\home\\word\\ckd.pdf");return new SuccessResultData();}
2.pdf

3.word

4.png

7.小结

至此功能实现,今天太晚了,明天研究一下路径获取,更新后给大家贴代码!
如果对你有帮助,希望可以一键三连!
感谢!

Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类相关推荐

  1. java word模板poi生成文件_利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  2. 利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  3. 使用NPOI按照word模板文件生成新的word文件

    /// <summary>/// 按照word模板文件 生成新word文件/// </summary>/// <param name="tempFile&quo ...

  4. npoi word生成HTML,使用NPOI按照word模板文件生成新的word文件

    /// /// 按照word模板文件 生成新word文件 /// /// 模板文件路径 /// 生成文件路径 /// 议案登记 public void CreateFileByTemplate(str ...

  5. Chimm.Excel —— 使用Java 操作 excel 模板文件生成 excel 文档

    内容已不在此处更新,请移步https://blog.csdn.net/chimmhuang/article/details/111251115 1. 项目介绍 Chimm.Excel 是什么? 该程序 ...

  6. java通过poi-tl模板引擎生成表格(Word)

    java通过poi-tl生成表格以及源码分析 依赖 模板 如何动态生成表格 参考文档及分析 代码 最近导出的word文件要求是越来越多了,而且对样式也做了很多要求,今天参考文档学习了一下普通表格构建表 ...

  7. 使用Java压缩文件生成各种zip包总结(整理为工具类版)

    最近由于客户来回修改需求,使得我对代码也是反复修改,最终折腾完毕后,让我总结了3种Java生成的zip包. 1.普通zip包,解压后的样子与打包压缩前一模一样,直接解压即可. 过程如下: 打包E盘下p ...

  8. java通过ftl模板导出word最详细教程

    百度云链接 链接: https://pan.baidu.com/s/1OEzvsFSqAelstDtu2mo5xw 提取码: fdhq https://pan.baidu.com/s/1OEzvsFS ...

  9. 通过一个word模板来生成新的word并且填充内容

    关于用Java编写生成word文档,动态添加数据到word文档的一些心得,经过翻阅了无数的有用的和无用的资料以后,总算找到了一种靠谱的方法 1.概述 经过反反复复的查阅资料,总算找到了一个靠谱的生成w ...

最新文章

  1. 什么是高/低方差、高/低偏差、(推荐阅读)
  2. iOSSharing #9 | 2019-05-19
  3. 5G前夜 运营商如何实现网络创新?
  4. leetcode算法题--煎饼排序
  5. Http中的Post和GET请求的区别
  6. java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent
  7. Linux复习资料(一)、VM虚拟机安装教程
  8. C++ 类和对象(一):类的概念、类的访问控制和封装、类对象模型、this指针
  9. [转载] 华中科技大学期刊分类办法
  10. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(二)
  11. pytorch torch.tensor
  12. apache2配置优化以及性能测试小结
  13. 如何将网格式报表打印成其它样式
  14. 对比几个空地址“订阅”的结果
  15. 有道词典java下载电脑版下载手机版下载安装_【有道词典官方下载】有道词典PC版下载_多特软件站...
  16. Xv6 Page Table
  17. 博文视点架构师成长书单,5本书助你少走弯路
  18. java集合类习题_Java集合练习
  19. OneTool多平台助手程序网页源码全解版
  20. mysql 中的 SCHEMATA 表

热门文章

  1. MySQL多表查询练习
  2. CDN到底是个什么鬼?看完这篇你就懂了!
  3. 带桌面推送Ai智能客服系统在线客服源码
  4. 关于 insert into ... select * from 注意事项
  5. 读 Stephen Prata 之 C++ Primer Plus
  6. 计算机毕业设计ssm物流站环境监测系统
  7. js内容混淆,返回内容加密
  8. 原创:oracle PL/SQL编程基础 下lt;十二gt;
  9. HadoopHbaseZookeeper集群
  10. 计算机社团评优申报资料,优秀社团会员申请书