使用freemarker导出html格式的word(续)

本文详细介绍了如何使用Freemarker处理.mht模板,动态替换参数并插入图片,最终导出为HTML格式的Word文档。步骤包括准备.mht模板、程序替换参数和处理编辑器内容,重点是模板的编辑和内容的处理,确保图片和格式在导出时不丢失。
摘要由CSDN通过智能技术生成

本文接上文(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'>&#27979;&#35797;&#25253;&#21578;</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'>&#19968;&#12289;<span
                    style=3D'font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</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'>&#27010;&#35201;</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'>&#23545;&#20110;&#23548;&#20986;<span
lang=3DEN-US>Word
</span>&#24182;&#25658;&#24102;&#22270;&#29255;&#30340;<span
lang=3DEN-US>123</span>
&#31181;&#26041;&#27861;&#25506;&#32034;&#65292;&#26597;
    &#35810;&#21040;&#20351;&#29992;<span
lang=3DEN-US>itext</span>&#36716;&#25442;&#20449;&#24687;<span
lang=3DEN-US>${num1!}</span>&#26465;&#65292;&#20351;&#29992;<span
lang=3DEN-US>openoffice</span>&#36716;&#25442;&#20449;&#24687;<span
lang=3DEN-US>${num2!}</span>&#26465;&#65292;<span
lang=3DEN-US>pageoffice</span>&#36716;&#25442;&#20449;&#24687;<span
lang=3DEN-US>${num3!}</span>&#26465;&#65292;<span
lang=3DEN-US>poi</span>&#36716;&#25442;&#20449;&#24687;<span
    lang=3DEN-US>${num4!}</span>&#26465;&#65292;<span
lang=3DEN-US>freemarker</span>&#36716;&#25442;&#20449;&#24687;<span
    lang=3DEN-US>${num5!}</span>&#26465;&#12290;<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'>(&#19968;)<span
    style=3D'font:7.0pt "Times New Roman"'>&nbsp;&nbsp;
</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'>&#34920;&#26684;&#23637;&#31034;</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
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值