Explorar el Código

背景也可以了

4.1.3.A
jueyue hace 7 años
padre
commit
b94672f786
Se han modificado 5 ficheros con 110 adiciones y 49 borrados
  1. +36
    -35
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/CssParseServer.java
  2. +19
    -3
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/BackgroundCssConvertImpl.java
  3. +25
    -3
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/TextCssConvertImpl.java
  4. +3
    -3
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/entity/style/CssStyleFontEnity.java
  5. +27
    -5
      easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiCssUtils.java

+ 36
- 35
easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/CssParseServer.java Ver fichero

@@ -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;


+ 19
- 3
easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/BackgroundCssConvertImpl.java Ver fichero

@@ -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());
}
}
}

+ 25
- 3
easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/css/impl/TextCssConvertImpl.java Ver fichero

@@ -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());
}
}
}
}

+ 3
- 3
easypoi-base/src/main/java/org/jeecgframework/poi/excel/html/entity/style/CssStyleFontEnity.java Ver fichero

@@ -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;
}


+ 27
- 5
easypoi-base/src/main/java/org/jeecgframework/poi/util/PoiCssUtils.java Ver fichero

@@ -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;
}

}

Cargando…
Cancelar
Guardar