You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用POI 5.2.2向Word写入HTML时,如何保留Base64图片的宽高?

POI 5.2.2写入Word时Base64图片宽高保留问题解决

场景与问题

我在Java中使用POI 5.2.2将HTML内容写入Word模板,核心代码如下:

MyXWPFHtmlDocument myXWPFHtmlDocument = createHtmlDoc(document, "htmlDoc");
myXWPFHtmlDocument.setHtml(myXWPFHtmlDocument.getHtml().replace(
    "<body></body>", "<body>"+ StringHtmlFlux + "</body>"));
replaceIBodyElementWithAltChunk(document, "${content}", myXWPFHtmlDocument);

其中${content}是模板中的标记位。

目前遇到的问题:本地路径的图片(如<img width="50" height="50" src="C:/Temp/fleur.jpg">)写入Word后能正常保留宽高,但相同尺寸的Base64格式图片(如<img width="50" height="50" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...">)无法保留指定尺寸,尝试添加style标签也未成功。

解决方法

POI的AltChunk处理Base64图片时,对width/height属性的解析逻辑和本地图片不同,需要将宽高属性转换为内联style样式,并且明确指定单位(如px),才能被Word正确识别。

可以通过正则预处理HTML内容中的Base64图片标签:

// 预处理HTML中的Base64图片,将width/height属性转为内联style
String processedHtmlFlux = StringHtmlFlux.replaceAll(
    "<img(.*?)width=\"(\\d+)\"(.*?)height=\"(\\d+)\"(.*?)src=\"data:image/.*?base64,.*?\"",
    "<img$1style=\"width:$2px; height:$4px;\"$3$5"
);

// 替换到HTML文档中
myXWPFHtmlDocument.setHtml(myXWPFHtmlDocument.getHtml().replace(
    "<body></body>", "<body>"+ processedHtmlFlux + "</body>"));

原理说明

Word对AltChunk中的HTML解析时,Base64图片的原生width/height属性不会被正确映射到Word的图片尺寸,而内联style中的width和height带单位的定义,会被Word的HTML转译引擎正确识别并应用到图片上。

内容的提问来源于stack exchange,提问作者Igniz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 00:07:30