Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类
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工具类相关推荐
- java word模板poi生成文件_利用poi读取word模板文件生成新的word文档
利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...
- 利用poi读取word模板文件生成新的word文档
利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...
- 使用NPOI按照word模板文件生成新的word文件
/// <summary>/// 按照word模板文件 生成新word文件/// </summary>/// <param name="tempFile&quo ...
- npoi word生成HTML,使用NPOI按照word模板文件生成新的word文件
/// /// 按照word模板文件 生成新word文件 /// /// 模板文件路径 /// 生成文件路径 /// 议案登记 public void CreateFileByTemplate(str ...
- Chimm.Excel —— 使用Java 操作 excel 模板文件生成 excel 文档
内容已不在此处更新,请移步https://blog.csdn.net/chimmhuang/article/details/111251115 1. 项目介绍 Chimm.Excel 是什么? 该程序 ...
- java通过poi-tl模板引擎生成表格(Word)
java通过poi-tl生成表格以及源码分析 依赖 模板 如何动态生成表格 参考文档及分析 代码 最近导出的word文件要求是越来越多了,而且对样式也做了很多要求,今天参考文档学习了一下普通表格构建表 ...
- 使用Java压缩文件生成各种zip包总结(整理为工具类版)
最近由于客户来回修改需求,使得我对代码也是反复修改,最终折腾完毕后,让我总结了3种Java生成的zip包. 1.普通zip包,解压后的样子与打包压缩前一模一样,直接解压即可. 过程如下: 打包E盘下p ...
- java通过ftl模板导出word最详细教程
百度云链接 链接: https://pan.baidu.com/s/1OEzvsFSqAelstDtu2mo5xw 提取码: fdhq https://pan.baidu.com/s/1OEzvsFS ...
- 通过一个word模板来生成新的word并且填充内容
关于用Java编写生成word文档,动态添加数据到word文档的一些心得,经过翻阅了无数的有用的和无用的资料以后,总算找到了一种靠谱的方法 1.概述 经过反反复复的查阅资料,总算找到了一个靠谱的生成w ...
最新文章
- 什么是高/低方差、高/低偏差、(推荐阅读)
- iOSSharing #9 | 2019-05-19
- 5G前夜 运营商如何实现网络创新?
- leetcode算法题--煎饼排序
- Http中的Post和GET请求的区别
- java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent
- Linux复习资料(一)、VM虚拟机安装教程
- C++ 类和对象(一):类的概念、类的访问控制和封装、类对象模型、this指针
- [转载] 华中科技大学期刊分类办法
- 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(二)
- pytorch torch.tensor
- apache2配置优化以及性能测试小结
- 如何将网格式报表打印成其它样式
- 对比几个空地址“订阅”的结果
- 有道词典java下载电脑版下载手机版下载安装_【有道词典官方下载】有道词典PC版下载_多特软件站...
- Xv6 Page Table
- 博文视点架构师成长书单,5本书助你少走弯路
- java集合类习题_Java集合练习
- OneTool多平台助手程序网页源码全解版
- mysql 中的 SCHEMATA 表