本文接上文(https://blog.csdn.net/u011099093/article/details/81010298)继续探讨导出word中携带图片问题。
在参考了博文http://www.cnblogs.com/liaofeifight/p/5484891.html后,改用.mht格式的模板进行编辑,首先介绍下整体思路:
1.准备好一个word(.doc格式),在里面编辑好自己想要的内容,把需要动态替换的部分 以参数替代,另存为.mht单网页;
2.对.mht单网页内容进行微调(该文件每行应该有长度限制,部分换行时会以=结束),作为第一个模板,程序替换参数后返回body区域的html文本,放入富文本编辑器进行编辑及插入图片;
3.将编辑器内容传至后台解析,分解为指定的几个部分,freemarker替换第二个.mht模板中的参数,导出为word;
一、准备mht模板
这里需要准备两个模板:
第一个模板是替换详细数据用的:根据需要编辑一个word,将需要替换的部分改为指定参数:
然后将word另存为但网页文件(mht),对mht文件进行微调,由于该文件会自动换行,同时在行末添加一个=连接符,所以主要将第一个<body></body>标签中不必要的=删掉,以便后面提取到编辑器中时样式不会乱。
这里要注意复制模板内容到项目ftl文件中时部分行首会有空格,需要将所有行顶格,这是.ftl文件<body>部分的代码,中文都被自动转换为ascii十进制编码:
<body>
<div class=3DWordSection1 style=3D'layout-grid:21.75pt'>
<p class=3DMsoTitle style=3D'margin-right:16.0pt;text-indent:0cm;
mso-char-i=ndent-count:
0'><span style=3D'mso-bidi-font-size:22.0pt;font-family:SimSun;
mso-ascii-font-family:
Cambria;mso-ascii-theme-font:major-latin;mso-hansi-font-family:Cambria;
mso-hansi-theme-font:major-latin'>测试报告</span>
<span
lang=3DEN-US style=3D'mso-bidi-font-size:22.0pt'><o:p></o:p></span></p>
<h1 style=3D'margin-left:21.0pt;text-indent:-21.0pt;mso-char-indent-count:0;
mso-list:l0 level1 lfo2'><![if !supportLists]><span lang=3DEN-US
style=3D'mso-bidi-font-family:SimSun;mso-bidi-theme-font:major-fareast'>
<span
style=3D'mso-list:Ignore'>一、<span
style=3D'font:7.0pt "Times New Roman"'>
</span></span></span><![endif]>
<span style=3D'font-family:SimSun;mso-ascii-font-family:
Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:SimSun;
mso-fareast-theme-font:major-fareast;mso-hansi-font-family:Calibri;
mso-hansi-theme-font:
minor-latin'>概要</span></h1>
<p class=3DMsoNormal style=3D'margin-right:15.85pt;
mso-para-margin-right:.99gd;
text-indent:32.0pt'><span style=3D'mso-bidi-font-size:16.0pt;
font-family:\4EFF\5B8B'>对于导出<span
lang=3DEN-US>Word
</span>并携带图片的<span
lang=3DEN-US>123</span>
种方法探索,查
询到使用<span
lang=3DEN-US>itext</span>转换信息<span
lang=3DEN-US>${num1!}</span>条,使用<span
lang=3DEN-US>openoffice</span>转换信息<span
lang=3DEN-US>${num2!}</span>条,<span
lang=3DEN-US>pageoffice</span>转换信息<span
lang=3DEN-US>${num3!}</span>条,<span
lang=3DEN-US>poi</span>转换信息<span
lang=3DEN-US>${num4!}</span>条,<span
lang=3DEN-US>freemarker</span>转换信息<span
lang=3DEN-US>${num5!}</span>条。<span
lang=3DEN-US><o:p></o:p></span></span></p>
<h2 style=3D'margin-left:21.0pt;text-indent:-21.0pt;mso-char-indent-count:0;
mso-list:l1 level1 lfo4'><![if !supportLists]><span lang=3DEN-US
style=3D'font-family:SimSun;mso-ascii-theme-font:major-fareast;
mso-fareast-font-family:
SimSun;mso-fareast-theme-font:major-fareast;
mso-hansi-theme-font:major-fareast;
mso-bidi-font-family:SimSun;mso-bidi-theme-font:major-fareast'><span
style=3D'mso-list:Ignore'>(一)<span
style=3D'font:7.0pt "Times New Roman"'>
</span></span></span><![endif]>
<span style=3D'font-family:SimSun;mso-ascii-font-family:
Cambria;mso-ascii-theme-font:major-latin;mso-fareast-font-family:SimSun;
mso-fareast-theme-font:major-fareast;mso-hansi-font-family:Cambria;
mso-hansi-theme-font:
major-latin'>表格展示</span></h2>
<table class=3DMsoTableGrid border=3D1 cellspacing=3D0
cellpadding=3D0 align=3Dleft
width=3D1093 style=3D'width:546.3pt;border-collapse:collapse;border:none;
mso-border-alt:solid windowtext .5pt;mso-table-overlap:never;
mso-yfti-tbllook:
1184;mso-table-lspace:9.0pt;margin-left:7.5pt;mso-table-rspace:9.0pt;
margin-right:7.5pt;mso-table-anchor-vertical:paragraph;
mso-table-anchor-horizontal:
column;mso-table-left:left;mso-table-top:.05pt;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
<tr style=3D'mso-yfti-irow:0;mso-yfti-firstrow:yes;height:29.2pt'>
<td width=3D182 style=3D'width:91.2pt;border:solid windowtext 1.0pt;
mso-border-alt:
solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt;height:29.2pt'>
<p class=3DMsoNormal align=3Dcenter style=3D'text-align:center;
text-indent:0cm;
mso-char-indent-count:0;mso-element:frame;mso-element-frame-hspace:9.0pt;
mso-element-wrap:around;mso-element-anchor-vertical:paragraph;
mso-element-anchor-horizontal:
column;mso-element-top:.05pt;mso-height-rule:exactly'>
<b style=3D'mso-bidi-font-weight:
normal'><span lang=3DEN-US style=3D'font-size:12.0pt'>itext<o:p></o:p>
</span></b></p>
</td>
<td width=3D182 style=3D'width:91.2pt;border:solid windowtext 1.0pt;
border-left:
none;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:29.2pt'>
<p class=3DMsoNormal align=3Dcenter
style=3D'text-align:center;text-indent:0cm;
mso-char-indent-count:0;mso-element:frame;mso-element-frame-hspace:9.0pt;
mso-element-wrap:around;mso-element-anchor-vertical:paragraph;
mso-element-anchor-horizontal:
column;mso-element-top:.05pt;mso-height-rule:exactly'>
<b style=3D'mso-bidi-font-weight:
normal'><span lang=3DEN-US
style=3D'font-size:12.0pt'>openOffice<o:p></o:p></span></b></p>
</td>
<td width=3D183 style=3D'width:91.25pt;
border:solid windowtext 1.0pt;border-left:
none;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:29.2pt'>
<p class=3DMsoNormal align=3Dcenter style=3D'text-align:center;
text-indent:0cm;
mso-char-indent-count:0;mso-element:frame;mso-element-frame-hspace:9.0pt;
mso-element-wrap:around;mso-element-anchor-vertical:paragraph;
mso-element-anchor-horizontal:
column;mso-element-top:.05pt;mso-height-rule:exactly'>
<b style=3D'mso-bidi-font-weight:
normal'><span lang=3DEN-US style=3D'font-size:12.0pt'>PageOffice
<o:p></o:p></span></b></p>
</td>
<td width=3D183 style=3D'width:91.25pt;border:solid windowtext 1.0pt;
border-left:
none;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:29.2pt'>
<p class=3DMsoNormal align=3Dcenter style=3D'text-align:center;
text-indent:0cm;
mso-char-indent-count:0;mso-element:frame;mso-element-frame-hspace:9.0pt;
mso-element-wrap:around;mso-element-anchor-vertical:paragraph;
mso-element-anchor-horizontal:
column;mso-element-top:.05pt;mso-height-rule:exactly'>
<b style=3D'mso-bidi-font-weight:
normal'><span lang=3DEN-US style=3D'font-size:12.0pt'>Poi<o:p></o:p>
</span></b></p>
</td>
<td width=3D183 style=3D'width:91.25pt;border:solid windowtext 1.0pt;
border-left:
none;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:29.2pt'>
<p class=3DMsoNormal align=3Dcenter style=3D'text-align:center;
text-indent:0cm;
mso-char-indent-count:0;mso-element:frame;mso-element-frame-hspace:9.0pt;
mso-element-wrap:around;mso-element-anchor-vertical:paragraph;
mso-element-anchor-horizontal:
column;mso-element-top:.05pt;mso-height-rule:exactly'>
<b style=3D'mso-bidi-font-weight:
normal'><span lang=3DEN-US style=3D'font-size:12.0pt'>Freemarker
<o:p></o:p></span></b></p>
</td>
<td width=3D183
style=3D'width:91.25pt;border:solid windowtext 1.0pt;border-left:
none;mso-border-left-alt:solid windowtext .5pt;
mso-border-alt:solid windowtext .5pt;
padding:0cm 5.4pt 0cm 5.4pt;height:29.2pt'>
<p class=3DMsoNormal a