Apache POI 5.2.5中如何修改XSLFTableCell内链接文本的默认颜色?
解决Apache POI 5.2.5中XSLFTableCell超链接文本颜色失效问题
在使用Apache POI 5.2.5的XMLSlideShow生成PPT表格时,若为XSLFTableCell内的文本添加超链接,调用setFontColor设置自定义颜色会被PowerPoint默认的超链接主题样式覆盖,最终显示为默认蓝色。
问题原因
PowerPoint中,超链接文本会默认继承主题里的超链接样式,该样式优先级高于通过POI高层API设置的字体颜色,导致自定义颜色失效。
解决方案
直接操作底层XML元素,强制为超链接文本设置纯色填充颜色,绕过主题样式的覆盖。
修改后的Kotlin代码片段
val tbl = slide.createTable() tbl.anchor = Rectangle(10, 10, 700, 150) val tr = tbl.addRow() val td = tr.addCell() val p = td.addNewTextParagraph() val r = p.addNewTextRun() r.setText("Search") val link = r.createHyperlink() link.address = "http://google.com" r.fontSize = 14.0 // 直接操作XML结构设置自定义颜色 val ctR = r.getCTR() val rPr = ctR.rPr ?: ctR.addNewRPr() val solidFill = if (rPr.isSetSolidFill()) rPr.solidFill else rPr.addNewSolidFill() val srgbClr = if (solidFill.isSetSrgbClr()) solidFill.srgbClr else solidFill.addNewSrgbClr() srgbClr.val = byteArrayOf(42.toByte(), 198.toByte(), 151.toByte())
代码说明
- 通过
getCTR()获取文本Run对应的底层XML对象(CTR) - 确保字符属性(rPr)存在,若不存在则创建
- 添加或获取纯色填充(solidFill)元素,设置SRGB颜色值(对应目标RGB颜色的字节数组)
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

