使用FreeMarker模板引擎导出包含多张图片的DOC文档
1、使用wps创建一个DOC文档,示例:
Placeholder为需要填充字段的占位符,在使用模板引擎时替换的就是这些占位符的值,需要插入图片的位置需要先插入一张图片作为占位(我这里是插入了一个1*1的表格,服然后把图片丢在这个单元格里的)
2、使用WPS的文件另存为,将DOC文档转换成xml格式(Word xml文档)
转化后使用编辑器打开如下所示:
3、替换文本占位符
搜索Placeholder,对应替换为$ {Placeholder},这里替换的变量名会在解析模板的时候由程序传过来,我们这里有九个占位符,可以根据单元格实际需要填充的值命名,如$ {name},$ {age},$ {gender}等
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="微软雅黑"
w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" />
<w:color w:val="333333" />
<w:sz w:val="22" />
<w:lang w:val="en-US" w:eastAsia="zh-CN" />
</w:rPr>
<w:t>${Placeholder}</w:t>
</w:r>
4、替换图片
位置一、需要先找到图片的Base64的编码所在位置并使用占位符替换(搜索binaryData):
<#list img_glrcyry as glrcyry>
<pkg:part
pkg:name="/word/media/image${glrcyry_index+200}.jpeg"
pkg:contentType="image/jpeg">
<pkg:binaryData>${glrcyry}</pkg:binaryData>
</pkg:part>
</#list>
位置二、搜索文档图片约束位置(使用relationships/image关键字搜索):
<#list img_glrcyry as glrcyry>
<Relationship Id="rId${glrcyry_index+200}"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
Target="media/image${glrcyry_index+200}.jpeg" />
</#list>
位置三、替换图片的展示区域,这里可能有多张图片,所有使用list标记循环输出:
<#list img_glrcyry as glrcyry>
<w:p>
<w:pPr>
<w:jc w:val="center" />
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="微软雅黑"
w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" />
<w:color w:val="333333" />
<w:sz w:val="22" />
<w:vertAlign w:val="baseline" />
<w:lang w:eastAsia="zh-CN" />
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="微软雅黑"
w:hAnsi="微软雅黑" w:eastAsia="微软雅黑" />
<w:color w:val="333333" />
<w:sz w:val="22" />
<w:vertAlign w:val="baseline" />
<w:lang w:eastAsia="zh-CN" />
</w:rPr>
<w:drawing>
<wp:inline distT="0" distB="0" distL="114300"
distR="114300">
<wp:extent cx="3362325" cy="3238500" />
<wp:effectExtent l="0" t="0" r="9525" b="0" />
<wp:docPr id="${glrcyry_index+200}"
name="图片 ${glrcyry_index+200}" descr="11" />
<wp:cNvGraphicFramePr>
<a:graphicFrameLocks
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
noChangeAspect="1" />
</wp:cNvGraphicFramePr>
<a:graphic
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:graphicData
uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:pic
xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:nvPicPr>
<pic:cNvPr id="${glrcyry_index+200}"
name="图片 ${glrcyry_index+200}" descr="11" />
<pic:cNvPicPr>
<a:picLocks noChangeAspect="1" />
</pic:cNvPicPr>
</pic:nvPicPr>
<pic:blipFill>
<a:blip r:embed="rId${glrcyry_index+200}" />
<a:stretch>
<a:fillRect />
</a:stretch>
</pic:blipFill>
<pic:spPr>
<a:xfrm>
<a:off x="0" y="0" />
<a:ext cx="3362325" cy="3238500" />
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst />
</a:prstGeom>
</pic:spPr>
</pic:pic>
</a:graphicData>
</a:graphic>
</wp:inline>
</w:drawing>
</w:r>
</w:p>
</#list>
5、将修改好得xml后缀改为ftl(freemarker模板引擎)
在这个世界上,很多人赢在了不像别人,有些人却输在了不像自己。