最近遇到html页面导出word的问题,网上查了很多资料,大抵都是选用的第三方控件来做的,比如poi什么的。自己也试了下,感觉对图片的支持总有问题,然而自己的html还带有富文本编辑器(CKEditor)。所以索性放弃了第三方控件,自己写了一个帮助类,支持在指定位置插入图片,支持CKEditor,经测试可用,本文为博主原创,转载请说明出处。
简单说下思路,一般使用第三方控件转word,都是先写一个html的模版,或者用字符串拼出一个html来进行转换,但是我这里没用第三方的控件,故是反其道而行。先用word写一个样式模版来,需要插入数据的地方用特定的占位符表示如${name},然后将word的模版另存为单个网页(.mht)格式,查出数据后,替换掉其中的占位符,至于图片则取到后转成base64字符串替换进去,最后利用io流写成.doc文件。
事实上,细心的人可能已经领会到了,这并非是真正的word,只是一个后缀为.doc的伪word罢了,其真正的编码格式事实是.mht文件的3Dus-ascii编码。但是其最后的成果和word相差不大,也就是说可以达到预期的效果,不多说了,还是来说步骤,及代码。
一、制作一个mht格式模版
首先,需要新建一个word文档,在里面编好你想要的样式,需要加入数据的地方用占位符表示,如${name},需要加入图片的地方随便插一张图片就行了,富文本编辑器的地方也用占位符表示,如${content}然后另存为单个网页(.mht)格式,这个时候别心急,再用word将.mht文件打开&#x