一、实现思路:
(1)将给定的word文件强转为zip格式,获取并制作freemarker的文本数据模板文件、图片依赖模板文件;
(2)通过freemarker动态填充数据后生成临时word的文本数据文件、临时图片依赖;
(3)然后通过流合并,将生成的word文本数据文件、图片依赖文件、要插入图片,替换到默认的zip压缩包内对应的文件,图片保存在word/media中,流输出一个临时word文件;
(4)通过aspose将临时word文件转换为临时pdf文件
(5)通过流读取临时pdf文件,将流传递给浏览器,实现pdf文件导出;
(6)最后删除word临时文件;
二、基于docx格式文件创建模板:
(1)替换数据占位符:
将word模板中动态数据位置,用自己设定好对应的数据字段名称进行替换,注意word模板数据最终是放在一个map中的,因此要保证数据字段名不能重复。
(2)将替换数据占位符文件强制修改zip格式:
将数据占位符修改好的docx格式的word文件,强制修改后缀为zip,然后解压文件。解压后文档结构如下:
(3)获取文本数据文件document.xml:
复制zip解压后的word/document.xml,该文件为word中文本内容数据文件,我们需要替换的占位符全部在该文件中。
(4)获取图片依赖文件document.xml.rels:
复制zip解压后的word/_rels/document.xml.rels,该文件中为word图片依赖资源文件,如果我们需要动态插入图片,那么我们需要在该文件中插入我们要插入图片的依赖资源,然后在document.xml中对应位置插入图片依赖唯一标识符Id值即可:
(5)占位符修改为freemarker值替换符:
模板xml中freemaker值替换符号为${},我们需要将要退换的英文变量名称用${}包括起来。
(6)添加if-else for循环等逻辑:
if-else逻辑:
if-else-if逻辑:
for循环逻辑:
(7)完成freemarker模板创建:
通过freemaker基于docx生成word的最终文件需要以下三个:
文件一:实例zip压缩文件:
就是将模板强制修改为zip格式的压缩文件。
文件二:文本数据模板文件document.xml:
就是自己修改的xml模板文件。
文件三:图片资源依赖模板文件document.xml.rels:
如果有插入图片就需要此文件,也就是自己修改的xml.rels图片依赖模板文件。如果没有插入图片就不需要此文件。
三、拷贝word生成工具类:
临时文本数据文件生成:
临时图片依赖数据文件生成:
流合并生成临时word文件:
临时word转pdf核心方法:
四、代码controller中调用word工具类:
五、linux服务器安装中文字体:
具体安装操作见网址:
https://www.cnblogs.com/xionggeclub/p/6146484.html
详情文档汇总整理及word工具类见:
https://download.csdn.net/download/lsy_csdn_/11172238