@@ -44,9 +44,40 @@ public class CssParseServer { | |||
parseFontAttr(mapStyle); | |||
getBackground(mapStyle); | |||
return mapToCellStyleEntity(mapStyle); | |||
} | |||
private CellStyleEntity mapToCellStyleEntity(Map<String, String> mapStyle) { | |||
CellStyleEntity entity = new CellStyleEntity(); | |||
entity.setAlign(mapStyle.get(TEXT_ALIGN)); | |||
entity.setVetical(mapStyle.get(VETICAL_ALIGN)); | |||
entity.setBackground(getBackground(mapStyle)); | |||
entity.setHeight(mapStyle.get(HEIGHT)); | |||
entity.setWidth(mapStyle.get(WIDTH)); | |||
entity.setFont(getCssStyleFontEnity(mapStyle)); | |||
entity.setBackground(mapStyle.get(BACKGROUND_COLOR)); | |||
// TODO 这里较为复杂,后期处理 | |||
/*CellStyleBorderEntity border = new CellStyleBorderEntity(); | |||
entity.setBorder(border); | |||
border.setBorderBottom(borderBottom);*/ | |||
return entity; | |||
} | |||
private CssStyleFontEnity getCssStyleFontEnity(Map<String, String> style) { | |||
CssStyleFontEnity font = new CssStyleFontEnity(); | |||
font.setStyle(style.get(FONT_STYLE)); | |||
int fontSize = PoiCssUtils.getInt(style.get(FONT_SIZE)); | |||
if (fontSize > 0) { | |||
font.setSize(fontSize); | |||
} | |||
font.setWeight(style.get(FONT_WEIGHT)); | |||
font.setFamily(style.get(FONT_FAMILY)); | |||
font.setDecoration(style.get(TEXT_DECORATION)); | |||
font.setColor(style.get(COLOR)); | |||
return font; | |||
} | |||
private void parseFontAttr(Map<String, String> mapRtn) { | |||
log.debug("Parse Font Style."); | |||
@@ -152,56 +183,26 @@ public class CssParseServer { | |||
} | |||
} | |||
private CellStyleEntity mapToCellStyleEntity(Map<String, String> mapStyle) { | |||
CellStyleEntity entity = new CellStyleEntity(); | |||
entity.setAlign(mapStyle.get(TEXT_ALIGN)); | |||
entity.setVetical(mapStyle.get(VETICAL_ALIGN)); | |||
entity.setBackground(getBackground(mapStyle)); | |||
entity.setHeight(mapStyle.get(HEIGHT)); | |||
entity.setWidth(mapStyle.get(WIDTH)); | |||
entity.setFont(getCssStyleFontEnity(mapStyle)); | |||
// TODO 这里较为复杂,后期处理 | |||
/*CellStyleBorderEntity border = new CellStyleBorderEntity(); | |||
entity.setBorder(border); | |||
border.setBorderBottom(borderBottom);*/ | |||
return entity; | |||
} | |||
private CssStyleFontEnity getCssStyleFontEnity(Map<String, String> style) { | |||
CssStyleFontEnity font = new CssStyleFontEnity(); | |||
font.setStyle(style.get(FONT_STYLE)); | |||
int fontSize = PoiCssUtils.getInt(style.get(FONT_SIZE)); | |||
if (fontSize > 0) { | |||
font.setSize(fontSize); | |||
} | |||
font.setWeight(style.get(FONT_WEIGHT)); | |||
font.setFamily(style.get(FONT_FAMILY)); | |||
font.setDecoration(style.get(TEXT_DECORATION)); | |||
font.setColor(PoiCssUtils.parseColor(style.get(COLOR))); | |||
return font; | |||
} | |||
private String getBackground(Map<String, String> style) { | |||
Map<String, String> mapRtn = new HashMap<String, String>(); | |||
String bg = style.get(BACKGROUND); | |||
String bgColor = null; | |||
if (StringUtils.isNotBlank(bg)) { | |||
for (String bgAttr : bg.split("(?<=\\)|\\w|%)\\s+(?=\\w)")) { | |||
if ((bgColor = PoiCssUtils.processColor(bgAttr)) != null) { | |||
mapRtn.put(BACKGROUND_COLOR, bgColor); | |||
style.put(BACKGROUND_COLOR, bgColor); | |||
break; | |||
} | |||
} | |||
} | |||
bg = style.get(BACKGROUND_COLOR); | |||
if (StringUtils.isNotBlank(bg) && (bgColor = PoiCssUtils.processColor(bg)) != null) { | |||
mapRtn.put(BACKGROUND_COLOR, bgColor); | |||
style.put(BACKGROUND_COLOR, bgColor); | |||
} | |||
if (bgColor != null) { | |||
bgColor = mapRtn.get(BACKGROUND_COLOR); | |||
if (!"#ffffff".equals(bgColor)) { | |||
return mapRtn.get(BACKGROUND_COLOR); | |||
bgColor = style.get(BACKGROUND_COLOR); | |||
if ("#ffffff".equals(bgColor)) { | |||
style.remove(BACKGROUND_COLOR); | |||
} | |||
} | |||
return null; | |||
@@ -1,23 +1,39 @@ | |||
package org.jeecgframework.poi.excel.html.css.impl; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.apache.poi.hssf.usermodel.HSSFCell; | |||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||
import org.apache.poi.ss.usermodel.Cell; | |||
import org.apache.poi.ss.usermodel.CellStyle; | |||
import org.apache.poi.xssf.usermodel.XSSFCell; | |||
import org.apache.poi.xssf.usermodel.XSSFCellStyle; | |||
import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; | |||
import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; | |||
import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
import org.jeecgframework.poi.util.PoiCssUtils; | |||
public class BackgroundCssConvertImpl implements ICssConvertToExcel, ICssConvertToHtml { | |||
@Override | |||
public String convertToHtml(Cell cell, CellStyle cellStyle, CellStyleEntity style) { | |||
return null; | |||
} | |||
@Override | |||
public void convertToExcel(Cell cell, CellStyle cellStyle, CellStyleEntity style) { | |||
if (StringUtils.isEmpty(style.getBackground())) { | |||
return; | |||
} | |||
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); // 填充图案 | |||
if (cell instanceof XSSFCell) { | |||
((XSSFCellStyle) cellStyle) | |||
.setFillForegroundColor(PoiCssUtils.parseColor(style.getBackground())); | |||
} else if (cell instanceof HSSFCell) { | |||
cellStyle.setFillForegroundColor( | |||
PoiCssUtils.parseColor((HSSFWorkbook) cell.getRow().getSheet().getWorkbook(), | |||
style.getBackground()).getIndex()); | |||
} | |||
} | |||
} |
@@ -10,9 +10,13 @@ import org.apache.poi.hssf.util.HSSFColor.BLACK; | |||
import org.apache.poi.ss.usermodel.Cell; | |||
import org.apache.poi.ss.usermodel.CellStyle; | |||
import org.apache.poi.ss.usermodel.Font; | |||
import org.apache.poi.ss.usermodel.Workbook; | |||
import org.apache.poi.xssf.usermodel.XSSFColor; | |||
import org.apache.poi.xssf.usermodel.XSSFFont; | |||
import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; | |||
import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; | |||
import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
import org.jeecgframework.poi.util.PoiCssUtils; | |||
public class TextCssConvertImpl implements ICssConvertToExcel, ICssConvertToHtml { | |||
@@ -42,9 +46,13 @@ public class TextCssConvertImpl implements ICssConvertToExcel, ICssConvertToHtml | |||
if (StringUtils.isNotBlank(fontFamily)) { | |||
font.setFontName(fontFamily); | |||
} | |||
int color = style.getFont().getColor(); | |||
if (color != 0 && color != BLACK.index) { | |||
font.setColor((short) color); | |||
String color = style.getFont().getColor(); | |||
if (StringUtils.isNoneEmpty(color)) { | |||
if (font instanceof HSSFFont) { | |||
setFoutForHSSF(font, cell.getSheet().getWorkbook(), color); | |||
} else if (font instanceof XSSFFont) { | |||
setFoutForXSSF(font, color); | |||
} | |||
} | |||
if (UNDERLINE.equals(style.getFont().getDecoration())) { | |||
font.setUnderline(Font.U_SINGLE); | |||
@@ -52,4 +60,18 @@ public class TextCssConvertImpl implements ICssConvertToExcel, ICssConvertToHtml | |||
cellStyle.setFont(font); | |||
} | |||
private void setFoutForXSSF(Font font, String colorStr) { | |||
XSSFColor color = PoiCssUtils.parseColor(colorStr); | |||
((XSSFFont)font).setColor(color); | |||
} | |||
private void setFoutForHSSF(Font font, Workbook workbook, String colorStr) { | |||
HSSFColor color = PoiCssUtils.parseColor((HSSFWorkbook) workbook, colorStr); | |||
if (color != null) { | |||
if (color.getIndex() != BLACK.index) { | |||
font.setColor(color.getIndex()); | |||
} | |||
} | |||
} | |||
} |
@@ -35,7 +35,7 @@ public class CssStyleFontEnity { | |||
private int size; | |||
private String family; | |||
private String decoration; | |||
private int color; | |||
private String color; | |||
public String getStyle() { | |||
return style; | |||
@@ -69,11 +69,11 @@ public class CssStyleFontEnity { | |||
this.family = family; | |||
} | |||
public int getColor() { | |||
public String getColor() { | |||
return color; | |||
} | |||
public void setColor(int color) { | |||
public void setColor(String color) { | |||
this.color = color; | |||
} | |||
@@ -8,6 +8,7 @@ import java.util.regex.Pattern; | |||
import java.util.regex.Matcher; | |||
import org.slf4j.LoggerFactory; | |||
import org.apache.poi.hssf.util.HSSFColor; | |||
import org.apache.poi.xssf.usermodel.XSSFColor; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.apache.poi.hssf.usermodel.HSSFPalette; | |||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||
@@ -132,17 +133,37 @@ public class PoiCssUtils { | |||
/** | |||
* parse color | |||
* @param workBook work book | |||
* @param color string color | |||
* @return int | |||
* @return HSSFColor | |||
*/ | |||
public static int parseColor(String color) { | |||
public static HSSFColor parseColor(HSSFWorkbook workBook, String color) { | |||
HSSFColor poiColor = null; | |||
if (StringUtils.isNotBlank(color)) { | |||
Color awtColor = Color.decode(color); | |||
if (awtColor != null) { | |||
return awtColor.getRGB(); | |||
int r = awtColor.getRed(); | |||
int g = awtColor.getGreen(); | |||
int b = awtColor.getBlue(); | |||
HSSFPalette palette = workBook.getCustomPalette(); | |||
poiColor = palette.findColor((byte) r, (byte) g, (byte) b); | |||
if (poiColor == null) { | |||
poiColor = palette.findSimilarColor(r, g, b); | |||
} | |||
} | |||
} | |||
return 0; | |||
return poiColor; | |||
} | |||
public static XSSFColor parseColor(String color) { | |||
XSSFColor poiColor = null; | |||
if (StringUtils.isNotBlank(color)) { | |||
Color awtColor = Color.decode(color); | |||
if (awtColor != null) { | |||
poiColor = new XSSFColor(awtColor); | |||
} | |||
} | |||
return poiColor; | |||
} | |||
// -- | |||
@@ -156,7 +177,7 @@ public class PoiCssUtils { | |||
return String.format("#%02x%02x%02x", r, g, b); | |||
} | |||
private static int calcColorValue(String color) { | |||
public static int calcColorValue(String color) { | |||
int rtn = 0; | |||
// matches 64 or 64% | |||
Matcher m = Pattern.compile("^(\\d*\\.?\\d+)\\s*(%)?$").matcher(color); | |||
@@ -170,4 +191,5 @@ public class PoiCssUtils { | |||
} | |||
return rtn; | |||
} | |||
} |