java word转jpg图片不显示_解决java中html转word文档,转成功后的word文档在断网情况下无法显示图片问题...

前一段时间遇到一个问题,就是将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标签里的图片形式为:xxxxxxx  将图片转成Base64编码容易,但是并不是将Base64编码的图片简单的放到src=“xxxxx”里面就行了,需要能让word读懂。  转成能让word读懂的格式就更不容易了(也就是前文提到的那个xml文件)。因为图片有很多格式(.jpg/.png等等),还要涉及到word里特殊的标签(类似这种)。。。。 所以在尝试了之后也放弃了。

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格式的。能够完美解决问题。

成功后的结果:

53ea40d09027c7d705bbf7ca1fa353b6.png

文件类型:

a5a87e2443dce1f4b2dc2b464ccc870e.png

Demo地址:

http://download.csdn.net/download/wht21888/10120532

--------------------- 本文来自 kihtoner 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/wht21888/article/details/78545712?utm_source=copy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTMLWord并将图片插入Word文档的方法,可以使用Java的Apache POI库来实现。 首先,你需要下载并导入Apache POI库的相关JAR文件。可以从Apache官方网站上找到最新的版本。 接下来,你可以使用以下步骤来实现HTMLWord并插入图片: 1. 创建一个新的Word文档对象并打开它。 ```java XWPFDocument document = new XWPFDocument(); ``` 2. 读取HTML内容并将其换为Word格式。 ```java String html = "<html><body><h1>Hello, World!</h1></body></html>"; InputStream inputStream = new ByteArrayInputStream(html.getBytes()); HWPFDocumentCore wordDoc = WordToHtmlUtils.loadHtml(inputStream); WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter( DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() ); wordToHtmlConverter.processDocument(wordDoc); org.w3c.dom.Document htmlDocument = wordToHtmlConverter.getDocument(); ByteArrayOutputStream out = new ByteArrayOutputStream(); DOMSource domSource = new DOMSource(htmlDocument); StreamResult streamResult = new StreamResult(out); TransformerFactory tf = TransformerFactory.newInstance(); Transformer serializer = tf.newTransformer(); serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); serializer.setOutputProperty(OutputKeys.INDENT, "yes"); serializer.setOutputProperty(OutputKeys.METHOD, "html"); serializer.transform(domSource, streamResult); String content = new String(out.toByteArray()); ``` 3. 使用正则表达式提取HTML图片链接。 ```java Pattern pattern = Pattern.compile("<img[^>]+src=\"([^\"]+)\"[^>]*>"); Matcher matcher = pattern.matcher(content); ``` 4. 遍历图片链接,并将图片插入Word文档。 ```java while (matcher.find()) { String imageUrl = matcher.group(1); InputStream imageStream = new FileInputStream(imageUrl); String[] imgExt = imageUrl.split("\\."); String imgType = imgExt[imgExt.length - 1]; int imgFormat = XWPFDocument.PICTURE_TYPE_PNG; // 默认为PNG格式图片 if (imgType.equalsIgnoreCase("jpg") || imgType.equalsIgnoreCase("jpeg")) { imgFormat = XWPFDocument.PICTURE_TYPE_JPEG; } XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); int width = Units.toEMU(300); // 设置图片宽度 int height = Units.toEMU(200); // 设置图片高度 run.addPicture(imageStream, imgFormat, "image", width, height); imageStream.close(); } ``` 5. 保存Word文档。 ```java FileOutputStream outputStream = new FileOutputStream("output.docx"); document.write(outputStream); outputStream.close(); ``` 通过以上步骤,你可以将HTML换为Word并插入图片,最后将结果保存为一个可离线查看的Word文档。在代码,你需要将图片链接替换为实际的图片文件路径,并根据需要调整图片的尺寸和格式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值