您需要从 Excel 字体颜色获取 RGB 值。您可以通过几个步骤获得这些值。
获取合适的 POIColor
对象,您需要沿着 HSSF 或 XSSF 路径,提取适当的 HSSFColor 或 XSSFColor,然后从颜色中获取 RGB 值。
int red = 0;
int green = 0;
int blue = 0;
if (font instanceof HSSFont)
{
HSSFColor color = ((HSSFFont) font).getHSSFColor(hssfWorkbook);
// 0: red, 1: green, 2: blue
short[] rgb = color.getTriplet();
red = rgb[0];
green = rgb[1];
blue = rgb[2];
}
else if (font instanceof XSSFFont)
{
XSSFColor color = ((XSSFFont) font).getXSSFColor();
byte[] rgb = color.getRgb();
// Bytes are signed, so values of 128+ are negative!
// 0: red, 1: green, 2: blue
red = (rgb[0] < 0) ? (rgb[0] + 256) : rgb[0];
green = (rgb[1] < 0) ? (rgb[1] + 256) : rgb[1];
blue = (rgb[2] < 0) ? (rgb[2] + 256) : rgb[2];
}
// Use the rgb values here.
然后你可以使用 rgb 值来创建你的BaseColor
iText 中的对象。
Update:
有几个与在 XSSF 中提取颜色(对于 .xlsx 文件)相关的 Apache POI 错误:
#51222 http://issues.apache.org/bugzilla/show_bug.cgi?id=51222
#51236 http://issues.apache.org/bugzilla/show_bug.cgi?id=51236
#52079 http://issues.apache.org/bugzilla/show_bug.cgi?id=52079
#53274 http://issues.apache.org/bugzilla/show_bug.cgi?id=53274
当 XSSF 处理主题颜色时,这些错误就会出现。