前一段时间遇到一个问题,就是将html转成word文档,里面有图片,表格,和各类形式的文字。刚开始的作法是将html代码取出来,而后以留的形式进行保存,后缀名为.doc。当我转成以后发现一切完美,可是图片出现了问题:html
1.图片大小、像素有问题。java
2.(最严重的)图片存在word的是一个连接而已。编码
当咱们在断网的状况下(或者拷贝到两一台电脑上)打开word文档的时候 实际上看到的图片是一个连接,也就是说图片转化的不成功。.net
其实从本质上来讲,咱们能够看一下转化以后所谓的word文档的格式,(点击另存为,看文件类型)发现其实转化以后的文档的文件类型仍然是.html的格式。只有当咱们再次另存为而且选择文件类型为.doc格式的时候 才能作到真正意义上的转化,而且图片不会出现上述问题。缘由大体是html转word的时候中间会通过一步处理,先将html的文件转成了xml文件,而后在转成.doc格式,同时将html的图片转成了Base64编码的格式(替换了图片的连接)存在了xml文件里。(咱们能够打开将任意一篇.doc格式的word文档另存为成.xml文档后分析带有图片的那部分代码。)3d
因而乎浏览网上各类大神的解决办法,发现并无一个很好的解决方法。网上的关于html转化word的解决办法总结起来有如下几种状况:xml
1.用ASPOSE.WORDS控件来处理。(涉及到了asp。。还有神马控件。。扩展性太差,,果断不深刻这个方法。废弃之。)htm
2.把html文件里面的图片转成Base64格式存储。blog
好像是涉及到了上面所叙述的html转word的原理部分,可是那是word作的事,鬼知道当咱们在选择将word另存为.doc格式的时候word作了什么操做。。。。咱们都知道html标签里的图片形式为:<img src="xxxxxxx" /> 将图片转成Base64编码容易,可是并非将Base64编码的图片简单的放到src=“xxxxx”里面就好了,须要能让word读懂。 转成能让word读懂的格式就更不容易了(也就是前文提到的那个xml文件)。由于图片有不少格式(.jpg/.png等等),还要涉及到word里特殊的标签(相似这种<imgsrc="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..."/>)。。。。 因此在尝试了以后也放弃了。图片
3.用POI 这个jar包 开发
说这个的更是扯。Apache的POI对图片的处理不友好,甚至有的版本根本就不支持。在入坑好久以后,果断放弃。。。
4. javacdoc 的包
亲测 不能够。以上4中方法是网上讨论最多的,我从09年的帖子一直翻到17年的,总结下来的。。发现并无找到解决办法。。最后不得已,决定本身解析html文档,转化word。最终成功转化,实现了本身想要的结果。实现起来也很简单,只是解析了一下word而已。
5.利用freemaker模板。
这个能够解决,可是要大动干戈。实际开发的过程当中不会由于一点问题就换模板的。这样不利于开发和维护。
解决思路:
设法解决转成word的时候另存为时候看到的文件类型不是.html格式的就ok,这样的话就不会以图片连接的形式放在word里面。
解决办法:(相关demo和jar包后面会给出)
1.先 用jsoup的包将html格式化。(此处用于解析html代码。方便后面用itext包调用)
2.利用iText的jar包,这个jar包是转化pdf用到的,可是转化成word也能用。保存后在word里面的文件类型是.rtf格式的。可以完美解决问题。
成功后的结果:
文件类型:
Demo地址:
http://download.csdn.net/download/wht21888/10120532
--------------------- 本文来自 kihtoner 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/wht21888/article/details/78545712?utm_source=copy