sky丶斌
骑士
骑士
  • 最后登录2022-06-28
  • 发帖数29
阅读:25320回复:4

Java怎样将富文本导出为word(结帖)

楼主#
更多 发布于:2017-08-15 10:54
富文本中主要有图片和文字,哪位大哥大姐知道快帮帮忙!
------------------------------------------------------------------------------------------------------------------------
看到那么多人预览!问题已经解决了,我来回帖,哈哈↓
JAVA将含有图片和文章的富文本导出成word,先说一下思路:由于我们是要用word来解析带图片的富文本(说白了就是解析一段html,当然这段html代码是包含img标签:图片),传统的word模板导出(word另存为xml,在修改后缀为ftl)是行不通的,因为他解析不了html代码(至少我目前没有找到这方便的解决方案,大神勿喷~),这样的话我就要换用一种模板来处理这个模板:word模板另存为mht格式,再修改后缀为ftl。剩下的就是后台操作了,找到你存富文本的字段(html代码)获取里面的img标签,找到图片,并把图片解析为base64字符串,填充到我们只做的模板上就ok了,大体思路就这样了
一、模板制作(这个很重要)
提示:这里模板用office word来做,不要用wps
     创建word文件,我这里用第二个content来显示我们要的富文本,然后将我们的word文件另存为mht文件↓

图片:20160927141347016-1260943894.png

最后我们就拿到我们要的mht模板了,这仅仅是个开始...各位看官往下看
打开我们的mht文件并处理:在我们的文件里面找到下面这些东西,(拉到最底部)

图片:20160927141347016-1260943894.png

${imagesBase64String} 和 ${imagesXmlHrefString}这两个是我们手动加进去的,简析富文本图片的核心就在这里
然后保存一下,再把文件的后缀名改成ftl格式的就ok了(模板处理到此结束)
二、解析html

图片:20160927141347016-1260943894.png

handler.handledHtml(false);
String bodyBlock = handler.getHandledDocBodyBlock();
data.put("content", bodyBlock);   处理后的html代码块
data.put("imagesXmlHrefString", xmlimaHref);
data.put("imagesBase64String", handledBase64Block);  
三、填充模板


图片:QQ图片20170818125648.png

四、导出word(带富文本图的哟)

图片:QQ图片20170818130322.png


五、测试(main)

图片:20160927141347016-1260943894.png



结果结果:(默认导入到D盘)

图片:QQ截图20170818131033.jpg



要注意的是,作者在做导出测试的时候用的图片是本地的图片,所以在获取图片时用的是File类,而在做项目时,富文本中的图片是保存在服务器上的,并不是本地,用File肯定是获取不到的,这时候就使用URL获取网络图片,获取到后先写入到内存中,再转换成base64格式!记住一定要先保存在内存中再进行操作,不然因为我网络情况总是不定的,经常阻塞,导致生成的图片模糊一堆。附上修改的一部分代码(WordImageConvertor类imageToBase64方法):

图片:QQ截图20170818131033.jpg



附上demo源码链接:https://pan.baidu.com/s/1bpj2mCn
感谢参考文章:http://www.cnblogs.com/unruly/p/5912011.html
[sky丶斌于2017-08-18 13:34编辑了帖子]
sky丶斌
骑士
骑士
  • 最后登录2022-06-28
  • 发帖数29
沙发#
发布于:2017-08-15 13:59
oliver:通过测试发现,直接复制富文本的内容再粘贴到word能保留格式与图片等信息,可尝试:
1.js脚本复制内容至剪贴板
2.java或者其他语言获取剪贴板内容并写入到word.
回到原帖
最终还是要写入到word,我尝试一下。谢谢!
sky丶斌
骑士
骑士
  • 最后登录2022-06-28
  • 发帖数29
板凳#
发布于:2017-08-15 13:57
doubleyong:没有遇到过这个问题呢,你百度下,看看呢?回到原帖
好的
oliver
VIP
VIP
  • 最后登录2017-08-15
  • 发帖数4
地板#
发布于:2017-08-15 13:28
通过测试发现,直接复制富文本的内容再粘贴到word能保留格式与图片等信息,可尝试:
1.js脚本复制内容至剪贴板
2.java或者其他语言获取剪贴板内容并写入到word.
doubleyong
管理员
管理员
  • 最后登录2025-10-18
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
4楼#
发布于:2017-08-15 13:18
没有遇到过这个问题呢,你百度下,看看呢?

图片:answer.png

知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号