freemarker 操作word,生成带图片的文档在office 2013中打开,图片不能正确显示,在wps中就可以

freemarker 操作word,生成带图片的文档在office 2013中打开,图片不能正确显示,在wps中就可以

通过将word模板另存为WordXML文档,freemarker 操作word,生成带图片的文档在office 2013中打开,图片不能正确显示,在wps中就可以,原ftl模板如下:

    <#list key.zsxxImg as imgKey>
                             <#list imgKey.singleImg as img>
                                <w:pict>
                                    <w:binData w:name="${"wordml://"+key_index+imgKey_index+img_index+10000+".jpg"}">
                                          ${img.imgInfo}
                                    </w:binData>
                                    <v:shape id="_x0000_s1026" o:spt="75" alt="1524739911002" type="#_x0000_t75" style="height:${img.imgHeight}px;width:${img.imgWidth}px;" filled="f" o:preferrelative="t" stroked="f" coordsize="21600,21600">
                                        <v:path/>
                                        <v:fill on="f" focussize="0,0" />
                                        <v:stroke on="f" />
                                        <v:imagedata src="${"wordml://"+key_index+imgKey_index+img_index+10000+".jpg"}" o:title="" />
                                        <o:lock v:ext="edit" aspectratio="t" />
                                        <w10:wrap type="none" />
                                        <w10:anchorlock/>
                                    </v:shape>
                                </w:pict>
                          </#list>
                        </#list>

在这里插入图片描述
解决办法:w:binData中间不能有空格,在word中就能打开了

 <w:binData w:name="${"wordml://"+key_index+imgKey_index+img_index+10000+".jpg"}"> ${img.imgInfo}</w:binData>
当使用FreeMarker (FTL) 制作的Word文档在Mac上的WPS打开时格式错乱,可能是因为不同平台对XML格式的支持存在差异。要解决这个问题,你可以尝试调整文档的保存格式以适应Mac上WPS的期望。 1. **设置正确的XML格式**[^2]: 在编写代码生成Word文档时,确保在转换模板到XML时指定`Word 2003 XML`格式: ```java // 使用特定的XML版本 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature("com.sun.xml.bind.xmlschema-validation", false); DocumentBuilder builder = factory.newDocumentBuilder(); TransformerFactory transformerFactory = TransformerFactory.newInstance(); transformerFactory.setAttribute("javax.xml.transform.stream.TransformerFactory.SUPPORT_DTD", Boolean.FALSE); transformerFactory.setAttribute("javax.xml.transform.TransformerFactory.JAXP_SCHEMA_LANGUAGE", "http://schemas.microsoft.com/office/2003/word"); Transformer transformer = transformerFactory.newTransformer(); ``` 2. **跨平台兼容性考虑**[^1]: 如果上述方法不能解决问题,还可以尝试在生成Word文档时加入一些平台无关性的元素或逻辑,比如避免使用Windows特有的样式或字体,只使用标准的Office元素和属性。这样可以降低因操作系统差异导致的格式问题。 如果以上措施仍无法解决,你可能需要测试在其他平台上生成文档,找出具体问题所在。最后,确认WPS是否支持FTL文件的直接读取,如果不是,可能需要额外的转换步骤或工具。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值