draco1023 / poi-tl-ext

Extensions for poi-tl
Apache License 2.0
211 stars 53 forks source link

HTML中包含SVG图片后续会支持么? #38

Closed hubStarzy closed 2 years ago

hubStarzy commented 2 years ago

大佬,请问后续会支持HTML中包含的SVG图片么? 看了一下poi-tl是支持SVG的代码如下

if (pictureType == PictureType.SVG) { imageBytes = SVGConvertor.toPng(imageBytes, (float) width, (float) height); pictureType = PictureType.PNG; } 麻烦大佬能支持一下可好? 最好是不要转PNG直接将svg图片插入word文档

draco1023 commented 2 years ago

Office是到2016版本才支持SVG的,之前的版本需要将SVG转成VML才能正常显示,直接作为XML写入文档中从docx4j找到了一个例子: https://www.docx4java.org/forums/docx-java-f6/add-svg-to-document-t2927.html

hubStarzy commented 2 years ago

@draco1023 感谢您回复,文档我先看看,现在我还处于只能通过poi的api来读写word文档,直接操作xml我还需要再了解一下,不过这份文档对我帮助很大。

draco1023 commented 2 years ago

尝试进行了支持,可以参考 feature-svg 分支(基于poi 5.x),不过对于同样的 svg 内容,直接渲染 svg 标签和使用 img 标签引用 svg 作为 src 的效果有些不一样,还不清楚原因是什么,有待进一步分析

hubStarzy commented 2 years ago

感谢

draco1023 commented 2 years ago

已经找到了html中svg标签中无法正确渲染的问题:在于JSoup解析html的时候默认会将标签和属性转换为小写,导致Batik无法正确解析svg,解决办法是自定义了一个dom构建器,对svg使用xml解析模式,对其它标签仍然使用默认的html解析模式。已发布 0.3.140.3.14-beta 版本,请更新。

hubStarzy commented 2 years ago

好的,非常感谢!