freemaker生成word模板的各种坑,包含word打不开、批量添加图片、图片变形等问题总结

最近在使用freemaker做一个word模板,里面包含大量表格、截图、超链接等数据、历时一周多,遇到很多坑,现在想想都后怕,现在简单总结一下,希望给以后的小伙伴提供帮助,少走弯路!

坑一:word打不开

可能原因:

1、往xml文件中添加数据占位时,不细心导致文件中出现多余的{、}、;、#等字符,导致xml校验错误,会导致生成的word打不开。

2、word中有超链接,链接中包含多个参数时,会用&进行连接,然而在xml中&属于特殊字符,如若不处理,导致xml校验错误,会导致生成的word打不开;处理方式有两种如下

第一种:使用CDATA包含此链接,使得xml不解析,比如<![CDATA[www.test.com?param=1&num=2]]>

第二种:将特殊字符转义,&对应的转义为&amp;    其他特殊字符转义可自行去网上查询,转义后的链接就变成www.test.com?param=1&amp;num=2,这种xml是可以解析的。

3、xml校验没有问题(xml校验器https://www.runoob.com/xml/xml-validator.html),此时生成的docx文档,使用wps是可以打开的,但是使用office确打不开,解决方案是直接生成doc格式的文档,这样wps跟office都能打开了,具体原因不详,可能跟freemarker对docx跟doc支持不一样。

坑二:批量添加图片

由于第一次往word文档中加图片,而且是动态批量添加,没有头绪,网上查询了资料也都没有太好的方法,后面想着直接动态循环生成rId,没成想直接成功了,非常开心,但也产生一个新问题,就是图片变形了(下面在详细说),实现方式如下:

往word中加图片,首先在模板中需要插入一个图片进行占位,转换成xml后,关于图片的地方有三点,我自己理解的,描述的可能不太对,见谅!

1、图片的源定义

<Relationship Id="rId99" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image99.jpeg"/>

2、图片的base64码,用变量替换

<pkg:part pkg:name="/word/media/image99.jpeg" pkg:contentType="image/jpeg" pkg:compression="store">                                                                           
    <pkg:binaryData>${img_gqctt!"--"}</pkg:binaryData>
</pkg:part>

3、图片展示

<w:p w:rsidR="005A1D92" w:rsidRDefault="00785A68" w:rsidP="005A1D92">
    <w:pPr>
        <w:adjustRightInd w:val="0"/>
        <w:spacing w:line="360" w:lineRule="auto"/>
        <w:contextualSpacing/>
        <w:rPr>
            <w:rFonts w:ascii="等线" w:eastAsia="等线" w:hAnsi="等线"/>
            <w:sz w:val="24"/>
        </w:rPr>
    </w:pPr>
    <w:r>
        <w:rPr>
            <w:rFonts w:ascii="等线" w:eastAsia="等线" w:hAnsi="等线" w:cs="等线" w:hint="eastAsia"/>
            <w:bCs/>
            <w:noProof/>
            <w:sz w:val="24"/>
     
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值