freemarker基于docx格式创建模板导出带图片pdf文件

一、实现思路:

(1)将给定的word文件强转为zip格式,获取并制作freemarker的文本数据模板文件、图片依赖模板文件;

(2)通过freemarker动态填充数据后生成临时word的文本数据文件、临时图片依赖;

(3)然后通过流合并,将生成的word文本数据文件、图片依赖文件、要插入图片,替换到默认的zip压缩包内对应的文件,图片保存在word/media中,流输出一个临时word文件;

(4)通过aspose将临时word文件转换为临时pdf文件

(5)通过流读取临时pdf文件,将流传递给浏览器,实现pdf文件导出;

(6)最后删除word临时文件;

freemarker基于docx格式创建模板导出带图片pdf文件

二、基于docx格式文件创建模板:

(1)替换数据占位符:

将word模板中动态数据位置,用自己设定好对应的数据字段名称进行替换,注意word模板数据最终是放在一个map中的,因此要保证数据字段名不能重复。

freemarker基于docx格式创建模板导出带图片pdf文件

(2)将替换数据占位符文件强制修改zip格式:

将数据占位符修改好的docx格式的word文件,强制修改后缀为zip,然后解压文件。解压后文档结构如下:

freemarker基于docx格式创建模板导出带图片pdf文件

(3)获取文本数据文件document.xml:

复制zip解压后的word/document.xml,该文件为word中文本内容数据文件,我们需要替换的占位符全部在该文件中。

freemarker基于docx格式创建模板导出带图片pdf文件

(4)获取图片依赖文件document.xml.rels:

复制zip解压后的word/_rels/document.xml.rels,该文件中为word图片依赖资源文件,如果我们需要动态插入图片,那么我们需要在该文件中插入我们要插入图片的依赖资源,然后在document.xml中对应位置插入图片依赖唯一标识符Id值即可:

freemarker基于docx格式创建模板导出带图片pdf文件

freemarker基于docx格式创建模板导出带图片pdf文件

(5)占位符修改为freemarker值替换符:

模板xml中freemaker值替换符号为${},我们需要将要退换的英文变量名称用${}包括起来。

freemarker基于docx格式创建模板导出带图片pdf文件

(6)添加if-else for循环等逻辑:

if-else逻辑:

freemarker基于docx格式创建模板导出带图片pdf文件

if-else-if逻辑:

freemarker基于docx格式创建模板导出带图片pdf文件

for循环逻辑:

freemarker基于docx格式创建模板导出带图片pdf文件

(7)完成freemarker模板创建:

通过freemaker基于docx生成word的最终文件需要以下三个:

文件一:实例zip压缩文件:

就是将模板强制修改为zip格式的压缩文件。

文件二:文本数据模板文件document.xml:

就是自己修改的xml模板文件。

文件三:图片资源依赖模板文件document.xml.rels:

如果有插入图片就需要此文件,也就是自己修改的xml.rels图片依赖模板文件。如果没有插入图片就不需要此文件。

三、拷贝word生成工具类:

临时文本数据文件生成:

freemarker基于docx格式创建模板导出带图片pdf文件

临时图片依赖数据文件生成:

freemarker基于docx格式创建模板导出带图片pdf文件

流合并生成临时word文件:

freemarker基于docx格式创建模板导出带图片pdf文件

临时word转pdf核心方法:

freemarker基于docx格式创建模板导出带图片pdf文件

四、代码controller中调用word工具类:

freemarker基于docx格式创建模板导出带图片pdf文件

五、linux服务器安装中文字体:

具体安装操作见网址:

https://www.cnblogs.com/xionggeclub/p/6146484.html

详情文档汇总整理及word工具类见:

https://download.csdn.net/download/lsy_csdn_/11172238

上一篇:在python 3中解析.docx


下一篇:jquery 工作笔记,不断整理中..