前一段时间遇到一个问题,就是将html转成word文档,里面有图片,表格,和各种形式的文字。刚开始的做法是将html代码取出来,然后以留的形式进行保存,后缀名为.doc。当我转成之后发现一切完美,但是图片出现了问题:

        1.图片大小、像素有问题。

       2.(最严重的)图片存在word的是一个链接而已。

当我们在断网的情况下(或者拷贝到两一台电脑上)打开word文档的时候 实际上看到的图片是一个链接,也就是说图片转化的不成功。

其实从本质上来说,我们可以看一下转化之后所谓的word文档的格式,(点击另存为,看文件类型)发现其实转化之后的文档的文件类型仍然是.html的格式。只有当我们再次另存为并且选择文件类型为.doc格式的时候 才能做到真正意义上的转化,并且图片不会出现上述问题。原因大致是html转word的时候中间会经过一步处理,先将html的文件转成了xml文件,然后在转成.doc格式,同时将html的图片转成了Base64编码的格式(替换了图片的链接)存在了xml文件里。(我们可以打开将任意一篇.doc格式的word文档另存为成.xml文档后分析带有图片的那部分代码。)

于是乎浏览网上各种大神的解决办法,发现并没有一个很好的解决方法。网上的关于html转化word的解决办法总结起来有以下几种情况:

1.用ASPOSE.WORDS控件来处理。(涉及到了asp。。还有神马控件。。扩展性太差,,果断不深入这个方法。废弃之。)

2.把html文件里面的图片转成Base64格式存储。

       好像是涉及到了上面所叙述的html转word的原理部分,但是那是word做的事,鬼知道当我们在选择将word另存为.doc格式的时候word做了什么操作。。。。我们都知道html标签里的图片形式为:<img src="xxxxxxx" />  将图片转成Base64编码容易,但是并不是将Base64编码的图片简单的放到src=“xxxxx”里面就行了,需要能让word读懂。  转成能让word读懂的格式就更不容易了(也就是前文提到的那个xml文件)。因为图片有很多格式(.jpg/.png等等),还要涉及到word里特殊的标签(类似这种<img src="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

(年少无为,卖码为生,需要一点点资源币。   具体的方式在Demo里有,有什么问题或者你有更好的方式  欢迎加QQ:749938275 一起讨论)


解决java中html转word文档,转成功后的word文档在断网情况下无法显示图片问题相关推荐

  1. 【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)...

    无意间struts应用在有网络的情况下启动正常,在断网的情况下启动报错,报错代码如下图所示: SEVERE: Exception starting filter struts2 Class: java ...

  2. java 断网处理_如何处理浏览器的断网情况?

    好的断网处理会让人很舒适:lol的断线重连,王者荣耀的断线重连 可以确保游戏的继续进行 坏的断网处理甚至不处理会出bug:比如我手上的项目就出了个bug 业务人员表示非常苦恼 网络问题一直是一个很值得 ...

  3. java http请求 乱码_怎么解决java中的http请求乱码

    怎么解决java中的http请求乱码 发布时间:2020-06-23 20:00:11 来源:亿速云 阅读:90 作者:元一 怎么解决java中的http请求乱码?针对这个问题,今天小编总结了这篇文章 ...

  4. 解决java中对URL编码的问题

    解决java中对URL编码的问题 参考文章: (1)解决java中对URL编码的问题 (2)https://www.cnblogs.com/a198720/p/4210763.html 备忘一下.

  5. 解决java中使用getImage()导入图片失败问题

    解决java中使用getImage()导入图片失败问题 在使用getImage(fileName)方法导入图片时,一直失败.后来加入相对路径解决找不到图片问题. 代码如下 image = Toolki ...

  6. java字符乱码问题_怎么解决java中的字符乱码问题

    怎么解决java中的字符乱码问题 发布时间:2020-06-28 14:53:09 来源:亿速云 阅读:108 作者:Leah 怎么解决java中的字符乱码问题?相信很多没有经验的人对此束手无策,为此 ...

  7. java 插入 mysql 乱码_解决java中插入mysql中文乱码的方法

    解决java中插入mysql中文乱码的方法 发布时间:2020-07-11 14:35:11 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍解决java中插入mysql中文乱码的方法,文中介 ...

  8. Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码

    Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码 用一个例子来说明: 例子原理 启动一个线程A打印数字,从0打印到9,在数字等于5的时候,进入wait状态 ...

  9. java 找不到或无法加载类_解决Java中找不到或无法加载主类错误

    场景: 使用java命令运行.class文件时出现:"错误: 找不到或无法加载主类": 原因: 1.java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定 ...

  10. 解决java中浮点数相除向上取整出错的方法

    实际应用中,经常可以遇到浮点数之间相除然后向上取整,比如客流量与常量之比和店员数之间就应向上取整,多一个人都应该加一名员工. 先谈谈什么是向上取整,什么是向下取整 上取整,不管四舍五入的规则,只要后面 ...

最新文章

  1. Android常见错误
  2. cad四边形展开lisp_批量绘制四边形 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  3. Radware:当前,CDN安全远远不足
  4. 功能强大的被动开源情报自动化侦察框架
  5. 《17探索,18前行》
  6. Linux 设备驱动模型中的class(类)
  7. LeetCode 网易-1. 分割环(前缀和 + 哈希)
  8. delphi gui编辑工具源码_Python 快速构建一个简单的 GUI 应用
  9. 为什么C语言还是被很多人说成过时了?
  10. 测试 第七章 循环结构进阶 1205 草稿
  11. 查看占用指定端口的程序
  12. 企业文档管理_为什么这么多企业文档如此糟糕?
  13. Linux+gcc设置断点,gcc/g++常用编译选项和gdb常用调试命令
  14. 悦读上品 得乎益友
  15. SQLAlchemy基本使用
  16. 关于 tp5 事务操作总结
  17. 实现京东商城手机注册获取验证码
  18. 基于单片机的智能数字电子秤设计
  19. struts1——静态ActionForm与动态ActionForm
  20. FPGA实现对数log2和10*log10

热门文章

  1. 全民营销,只看这篇文章就够了
  2. 网吧计费系统数据库修复/网吧收银系统数据库恢复
  3. win10装kali linux双系统,win10安装kali组成双系统攻略
  4. Android茶叶进销存源码分享
  5. C语言_写简易吃豆人小游戏
  6. python教材答案第四章_第四章-习题答案
  7. Toastr 通知提示插件
  8. HDU1527——取石子游戏(威佐夫博弈)
  9. ArchLinux安装笔记「双系统U盘安装」(2018-11-19)
  10. 2022最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)