JavaWeb项目导出DOC文件(包含多张图片)-----使用FreeMarker模板引擎

1、使用wps创建一个DOC文档,示例:

在这里插入图片描述

Placeholder为需要填充字段的占位符,在使用模板引擎时替换的就是这些占位符的值,需要插入图片的位置需要先插入一张图片作为占位(我这里是插入了一个1*1的表格,服然后把图片丢在这个单元格里的)

2、使用WPS的文件另存为,将DOC文档转换成xml格式(Word 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模板引擎)

在这个世界上,很多人赢在了不像别人,有些人却输在了不像自己。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豢龙先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值