需求描述: 根据公司纪律小组的电子违规记录,生成word综合分析文档。形式如:
1. 上班时间打游戏
(1)XXX在XXX时间打游戏
图片
(2)XXXX在上班时间刷微博
图片
2.迟到
(1)XXX迟到
图片
....
所用技术:freemaker ;系统环境: cent os
制作模板的步骤别的博客里基本都有,和把map写进模板的代码大同小异,我也是抄别的博客里的。
我就说说遇到的坑和解决方法吧
1. 想要准确的复制成功 一定要复制一个<w:p>... </w:p>标签,这表示一个段落,里面带格式和内容
2. 最后模板生成时,我用的是xml 2003格式的,因为里面要图片,我看普通的xml格式里图片,是把图片存在一个统一地方,需要的地方是个引用。时间紧迫,我就用2003的,图片转为base64直接存在字段里。
3.生成结果: 最后生成文件时,保存的格式是xml格式,直接改后缀会打不开。我找了一个下午加晚上没找到好的解决方法,时间紧任务多,只能先搁置着。pageoffice打开xml格式的文件没问题。因为服务器是Linux,有个jacob包不能用。我现在解决方法就是加一行提示,请下载之后打开方式用word打开,并且另存为word格式。
4. freemaker循环对象
这个放心 正常循环,支持对象里的对象再一次循环。
附 :实体类和模板文件关键部分 关键部分加粗
@Data @Accessors( chain = true) public class ReportDataModel { String retitle; List<ReportItem> items; }
@Data public class ReportItem { String itemdata; String itempic; }
<#list recordData as record><w:p wsp:rsidR="001E6155" wsp:rsidRDefault="001E6155" wsp:rsidP="002E6BEF"><w:pPr><w:overflowPunct w:val="off"/><w:spacing w:line="560" w:line-rule="exact"/><w:ind w:first-line-chars="200" w:first-line="640"/><w:rPr><w:rFonts w:ascii="楷体" w:fareast="楷体" w:h-ansi="楷体" w:cs="方正仿宋_GBK" w:hint="fareast"/><wx:font wx:val="楷体"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="楷体" w:fareast="楷体" w:h-ansi="楷体" w:cs="方正仿宋_GBK" w:hint="fareast"/><wx:font wx:val="楷体"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>${record.retitle}</w:t></w:r></w:p><#list record.items as item><w:p wsp:rsidR="002C503E" wsp:rsidRDefault="001E6155" wsp:rsidP="002C503E"><w:r><w:rPr><w:rFonts w:ascii="方正仿宋_GBK" w:fareast="方正仿宋_GBK" w:hint="fareast"/><wx:font wx:val="方正仿宋_GBK"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:tab/></w:r><w:r><w:rPr><w:rFonts w:ascii="方正仿宋_GBK" w:fareast="方正仿宋_GBK" w:hint="fareast"/><wx:font wx:val="方正仿宋_GBK"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:tab/></w:r><w:proofErr w:type="spellStart"/><w:r><w:rPr><w:rFonts w:ascii="方正仿宋_GBK" w:fareast="方正仿宋_GBK" w:hint="fareast"/><wx:font wx:val="方正仿宋_GBK"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>${item.itemdata}</w:t></w:r><w:proofErr w:type="spellEnd"/></w:p><w:p wsp:rsidR="002C503E" wsp:rsidRDefault="0061702B" wsp:rsidP="002C503E"><w:r><w:rPr><w:noProof/></w:rPr><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://0300000"+item_index+1+".jpg"}" xml:space="preserve">${item.itempic}
</w:binData><v:shape id="_x56fe__x7247__x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75" alt="大厅【音】_20190111135230431" style="width:441.8pt;height:248.75pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="${"wordml://0300000"+item_index+1+".jpg"}" o:title="大厅【音】_20190111135230431"/></v:shape></w:pict></w:r></w:p>
</#list>
</#list>