freemarker编写带图片列表循环work模板

原模板样式 要求带简历头像,个人教育简历和工作经历为一对多数据源

首先先将word另存为xml格式

打开xml文件,将里面需要替换的内容替换成以${name}的形式

替换完成后work样式为:

接下来着手做循环数据的处理

以<#list xxxxList as xxxx> </#list>形式包裹循环数据块

注意:循环块中的数据需以xxxx.name的形式展示,另外加入<#list xxxxList as xxxx> </#list>标签后,生成的xml文件将无法以word形式打开

最后一步图片处理

a、使用freemarker生成word文档图片显示需要特殊处理,若是按照常理(使用占位符的形式)替换完成之后显示图片的区域只会出现一堆内容(即你给它赋值的内容)而不是一张图片。

b、如何处理:直接从某处复制一张图片放到word中需要显示的区域,然后另存为xml。打开xml文件可以发现这张图片是以base64编码存在的,且这些编码放在<w:binData>标签之中。将这些base64编码使用占位符代替然后进行常规处理就能正常显示了。

c、word中添加图片之后,xml里边就会多出一个<w:pict>标签,内容如下:

<w:pict>  
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">  
    <v:stroke joinstyle="miter"/>  
    <v:formulas>  
        <v:f eqn="if lineDrawn pixelLineWidth 0"/>  
        <v:f eqn="sum @0 1 0"/>  
        <v:f eqn="sum 0 0 @1"/>  
        <v:f eqn="prod @2 1 2"/>  
        <v:f eqn="prod @3 21600 pixelWidth"/>  
        <v:f eqn="prod @3 21600 pixelHeight"/>  
        <v:f eqn="sum @0 0 1"/>  
        <v:f eqn="prod @6 1 2"/>  
        <v:f eqn="prod @7 21600 pixelWidth"/>  
        <v:f eqn="sum @8 21600 0"/>  
        <v:f eqn="prod @7 21600 pixelHeight"/>  
        <v:f eqn="sum @10 21600 0"/>  
    </v:formulas>  
    <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>  
    <o:lock v:ext="edit" aspectratio="t"/>  
</v:shapetype>  
<w:binData w:name="wordml://03000001.png" xml:space="preserve">${image}</w:binData>  
<v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style="width:90.35pt;height:112.75pt">  
<v:imagedata src="wordml://03000001.png" o:href="http://127.0.0.1:8080/bfp/2016/12/30/00000000001.png"/>  
</v:shape>  
</w:pict>  

我们需要做的就是将里面的base64编码内容替换成${image},这样一份能用于freemarker生成work的模板就搞定了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值