| @@ -32,8 +32,9 @@ import org.jeecgframework.poi.excel.html.css.impl.BorderCssConverImpl; | |||
| import org.jeecgframework.poi.excel.html.css.impl.HeightCssConverImpl; | |||
| import org.jeecgframework.poi.excel.html.css.impl.TextCssConvertImpl; | |||
| import org.jeecgframework.poi.excel.html.css.impl.WidthCssConverImpl; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.ExcelCssConstant; | |||
| import org.jeecgframework.poi.excel.html.entity.HtmlCssConstant; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| /** | |||
| * 读取Table数据生成Excel | |||
| @@ -130,7 +131,7 @@ public class HtmlToExcelServer { | |||
| Map<String, Sheet> sheets = new HashMap<String, Sheet>(); | |||
| Map<String, Integer> maxrowMap = new HashMap<String, Integer>(); | |||
| for (Element table : els) { | |||
| String sheetName = table.attr("sheet"); | |||
| String sheetName = table.attr(ExcelCssConstant.SHEET_NAME); | |||
| if (StringUtils.isBlank(sheetName)) { | |||
| LOGGER.error("table必须存在name属性!"); | |||
| @@ -1,13 +1,19 @@ | |||
| package org.jeecgframework.poi.excel.html.css; | |||
| import static org.jeecgframework.poi.excel.html.entity.HtmlCssConstant.*; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| import java.util.regex.Matcher; | |||
| import java.util.regex.Pattern; | |||
| import org.apache.commons.lang3.ArrayUtils; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleBorderEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.HtmlCssConstant; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CssStyleFontEnity; | |||
| import org.jeecgframework.poi.util.PoiCssUtils; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| /** | |||
| * 把Css样式解析成对应的Model | |||
| @@ -16,6 +22,8 @@ import org.jeecgframework.poi.util.PoiCssUtils; | |||
| */ | |||
| public class CssParseServer { | |||
| private static final Logger log = LoggerFactory.getLogger(CssParseServer.class); | |||
| public CellStyleEntity parseStyle(String style) { | |||
| Map<String, String> mapStyle = new HashMap<String, String>(); | |||
| for (String s : style.split("\\s*;\\s*")) { | |||
| @@ -26,8 +34,7 @@ public class CssParseServer { | |||
| String attrName = ss[0].toLowerCase(); | |||
| String attrValue = ss[1]; | |||
| // do not change font name | |||
| if (!HtmlCssConstant.FONT.equals(attrName) | |||
| && !HtmlCssConstant.FONT_FAMILY.equals(attrName)) { | |||
| if (!FONT.equals(attrName) && !FONT_FAMILY.equals(attrName)) { | |||
| attrValue = attrValue.toLowerCase(); | |||
| } | |||
| mapStyle.put(attrName, attrValue); | |||
| @@ -35,16 +42,124 @@ public class CssParseServer { | |||
| } | |||
| } | |||
| parseFontAttr(mapStyle); | |||
| return mapToCellStyleEntity(mapStyle); | |||
| } | |||
| private void parseFontAttr(Map<String, String> mapRtn) { | |||
| log.debug("Parse Font Style."); | |||
| // color | |||
| String color = PoiCssUtils.processColor(mapRtn.get(COLOR)); | |||
| if (StringUtils.isNotBlank(color)) { | |||
| log.debug("Text Color [{}] Found.", color); | |||
| mapRtn.put(COLOR, color); | |||
| } | |||
| // font | |||
| String font = mapRtn.get(FONT); | |||
| if (StringUtils.isNotBlank(font) | |||
| && !ArrayUtils.contains(new String[] { "small-caps", "caption", "icon", "menu", | |||
| "message-box", "small-caption", "status-bar" }, | |||
| font)) { | |||
| log.debug("Parse Font Attr [{}].", font); | |||
| String[] ignoreStyles = new String[] { "normal", | |||
| // font weight normal | |||
| "[1-3]00" }; | |||
| StringBuffer sbFont = new StringBuffer( | |||
| font.replaceAll("^|\\s*" + StringUtils.join(ignoreStyles, "|") + "\\s+|$", " ")); | |||
| log.debug("Font Attr [{}] After Process Ingore.", sbFont); | |||
| // style | |||
| Matcher m = Pattern.compile("(?:^|\\s+)(italic|oblique)(?:\\s+|$)") | |||
| .matcher(sbFont.toString()); | |||
| if (m.find()) { | |||
| sbFont.setLength(0); | |||
| if (log.isDebugEnabled()) { | |||
| log.debug("Font Style [{}] Found.", m.group(1)); | |||
| } | |||
| mapRtn.put(FONT_STYLE, ITALIC); | |||
| m.appendReplacement(sbFont, " "); | |||
| m.appendTail(sbFont); | |||
| } | |||
| // weight | |||
| m = Pattern.compile("(?:^|\\s+)(bold(?:er)?|[7-9]00)(?:\\s+|$)") | |||
| .matcher(sbFont.toString()); | |||
| if (m.find()) { | |||
| sbFont.setLength(0); | |||
| if (log.isDebugEnabled()) { | |||
| log.debug("Font Weight [{}](bold) Found.", m.group(1)); | |||
| } | |||
| mapRtn.put(FONT_WEIGHT, BOLD); | |||
| m.appendReplacement(sbFont, " "); | |||
| m.appendTail(sbFont); | |||
| } | |||
| // size xx-small | x-small | small | medium | large | x-large | xx-large | 18px [/2] | |||
| m = Pattern.compile( | |||
| // before blank or start | |||
| new StringBuilder("(?:^|\\s+)") | |||
| // font size | |||
| .append("(xx-small|x-small|small|medium|large|x-large|xx-large|").append("(?:") | |||
| .append(PATTERN_LENGTH).append("))") | |||
| // line height | |||
| .append("(?:\\s*\\/\\s*(").append(PATTERN_LENGTH).append("))?") | |||
| // after blank or end | |||
| .append("(?:\\s+|$)").toString()) | |||
| .matcher(sbFont.toString()); | |||
| if (m.find()) { | |||
| sbFont.setLength(0); | |||
| log.debug("Font Size[/line-height] [{}] Found.", m.group()); | |||
| String fontSize = m.group(1); | |||
| if (StringUtils.isNotBlank(fontSize)) { | |||
| fontSize = StringUtils.deleteWhitespace(fontSize); | |||
| log.debug("Font Size [{}].", fontSize); | |||
| if (fontSize.matches(PATTERN_LENGTH)) { | |||
| mapRtn.put(FONT_SIZE, fontSize); | |||
| } else { | |||
| log.info("Font Size [{}] Not Supported, Ignore.", fontSize); | |||
| } | |||
| } | |||
| String lineHeight = m.group(2); | |||
| if (StringUtils.isNotBlank(lineHeight)) { | |||
| log.info("Line Height [{}] Not Supported, Ignore.", lineHeight); | |||
| } | |||
| m.appendReplacement(sbFont, " "); | |||
| m.appendTail(sbFont); | |||
| } | |||
| // font family | |||
| if (sbFont.length() > 0) { | |||
| log.debug("Font Families [{}].", sbFont); | |||
| // trim & remove '" | |||
| String fontFamily = sbFont.toString().split("\\s*,\\s*")[0].trim() | |||
| .replaceAll("'|\"", ""); | |||
| log.debug("Use First Font Family [{}].", fontFamily); | |||
| mapRtn.put(FONT_FAMILY, fontFamily); | |||
| } | |||
| } | |||
| font = mapRtn.get(FONT_STYLE); | |||
| if (ArrayUtils.contains(new String[] { ITALIC, "oblique" }, font)) { | |||
| log.debug("Font Italic [{}] Found.", font); | |||
| mapRtn.put(FONT_STYLE, ITALIC); | |||
| } | |||
| font = mapRtn.get(FONT_WEIGHT); | |||
| if (StringUtils.isNotBlank(font) && Pattern.matches("^bold(?:er)?|[7-9]00$", font)) { | |||
| log.debug("Font Weight [{}](bold) Found.", font); | |||
| mapRtn.put(FONT_WEIGHT, BOLD); | |||
| } | |||
| font = mapRtn.get(FONT_SIZE); | |||
| if (!PoiCssUtils.isNum(font)) { | |||
| log.debug("Font Size [{}] Error.", font); | |||
| mapRtn.remove(FONT_SIZE); | |||
| } | |||
| } | |||
| private CellStyleEntity mapToCellStyleEntity(Map<String, String> mapStyle) { | |||
| CellStyleEntity entity = new CellStyleEntity(); | |||
| entity.setAlign(mapStyle.get(HtmlCssConstant.TEXT_ALIGN)); | |||
| entity.setVetical(mapStyle.get(HtmlCssConstant.VETICAL_ALIGN)); | |||
| entity.setAlign(mapStyle.get(TEXT_ALIGN)); | |||
| entity.setVetical(mapStyle.get(VETICAL_ALIGN)); | |||
| entity.setBackground(getBackground(mapStyle)); | |||
| entity.setHeight(mapStyle.get(HtmlCssConstant.HEIGHT)); | |||
| entity.setWidth(mapStyle.get(HtmlCssConstant.WIDTH)); | |||
| entity.setHeight(mapStyle.get(HEIGHT)); | |||
| entity.setWidth(mapStyle.get(WIDTH)); | |||
| entity.setFont(getCssStyleFontEnity(mapStyle)); | |||
| // TODO 这里较为复杂,后期处理 | |||
| /*CellStyleBorderEntity border = new CellStyleBorderEntity(); | |||
| entity.setBorder(border); | |||
| @@ -52,27 +167,41 @@ public class CssParseServer { | |||
| 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(HtmlCssConstant.BACKGROUND); | |||
| 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(HtmlCssConstant.BACKGROUND_COLOR, bgColor); | |||
| mapRtn.put(BACKGROUND_COLOR, bgColor); | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| bg = style.get(HtmlCssConstant.BACKGROUND_COLOR); | |||
| bg = style.get(BACKGROUND_COLOR); | |||
| if (StringUtils.isNotBlank(bg) && (bgColor = PoiCssUtils.processColor(bg)) != null) { | |||
| mapRtn.put(HtmlCssConstant.BACKGROUND_COLOR, bgColor); | |||
| mapRtn.put(BACKGROUND_COLOR, bgColor); | |||
| } | |||
| if (bgColor != null) { | |||
| bgColor = mapRtn.get(HtmlCssConstant.BACKGROUND_COLOR); | |||
| bgColor = mapRtn.get(BACKGROUND_COLOR); | |||
| if (!"#ffffff".equals(bgColor)) { | |||
| return mapRtn.get(HtmlCssConstant.BACKGROUND_COLOR); | |||
| return mapRtn.get(BACKGROUND_COLOR); | |||
| } | |||
| } | |||
| return null; | |||
| @@ -17,7 +17,7 @@ package org.jeecgframework.poi.excel.html.css; | |||
| import org.apache.poi.ss.usermodel.Cell; | |||
| import org.apache.poi.ss.usermodel.CellStyle; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| /** | |||
| * CSS Cell Style 转换类 | |||
| @@ -17,7 +17,7 @@ package org.jeecgframework.poi.excel.html.css; | |||
| import org.apache.poi.ss.usermodel.Cell; | |||
| import org.apache.poi.ss.usermodel.CellStyle; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| /** | |||
| * CSS Cell Style 转换类 | |||
| @@ -4,20 +4,39 @@ import org.apache.poi.ss.usermodel.Cell; | |||
| import org.apache.poi.ss.usermodel.CellStyle; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.HtmlCssConstant; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| public class AlignCssConvertImpl 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) { | |||
| // align | |||
| if (HtmlCssConstant.RIGHT.equals(style.getAlign())) { | |||
| cellStyle.setAlignment(CellStyle.ALIGN_RIGHT); | |||
| } else if (HtmlCssConstant.CENTER.equals(style.getAlign())) { | |||
| cellStyle.setAlignment(CellStyle.ALIGN_CENTER); | |||
| } else if (HtmlCssConstant.LEFT.equals(style.getAlign())) { | |||
| cellStyle.setAlignment(CellStyle.ALIGN_LEFT); | |||
| } else if (HtmlCssConstant.JUSTIFY.equals(style.getAlign())) { | |||
| cellStyle.setAlignment(CellStyle.ALIGN_JUSTIFY); | |||
| } | |||
| // vertical align | |||
| if (HtmlCssConstant.TOP.equals(style.getVetical())) { | |||
| cellStyle.setVerticalAlignment(CellStyle.VERTICAL_TOP); | |||
| } else if (HtmlCssConstant.CENTER.equals(style.getAlign())) { | |||
| cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); | |||
| } else if (HtmlCssConstant.BOTTOM.equals(style.getAlign())) { | |||
| cellStyle.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM); | |||
| } else if (HtmlCssConstant.JUSTIFY.equals(style.getAlign())) { | |||
| cellStyle.setVerticalAlignment(CellStyle.VERTICAL_JUSTIFY); | |||
| } | |||
| } | |||
| } | |||
| @@ -4,7 +4,7 @@ import org.apache.poi.ss.usermodel.Cell; | |||
| import org.apache.poi.ss.usermodel.CellStyle; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| public class BackgroundCssConvertImpl implements ICssConvertToExcel, ICssConvertToHtml { | |||
| @@ -19,8 +19,8 @@ import org.apache.poi.ss.usermodel.Cell; | |||
| import org.apache.poi.ss.usermodel.CellStyle; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleBorderEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleBorderEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| /** | |||
| * 边框转换实现类 | |||
| @@ -21,7 +21,7 @@ import org.apache.poi.ss.usermodel.CellStyle; | |||
| import org.apache.poi.ss.usermodel.Row; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| import org.jeecgframework.poi.util.PoiCssUtils; | |||
| @@ -1,23 +1,55 @@ | |||
| package org.jeecgframework.poi.excel.html.css.impl; | |||
| import static org.jeecgframework.poi.excel.html.entity.HtmlCssConstant.*; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.apache.poi.hssf.usermodel.HSSFFont; | |||
| import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||
| import org.apache.poi.hssf.util.HSSFColor; | |||
| 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.jeecgframework.poi.excel.html.css.ICssConvertToExcel; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| public class TextCssConvertImpl 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 (style == null || style.getFont() == null) { | |||
| return; | |||
| } | |||
| Font font = cell.getSheet().getWorkbook().createFont(); | |||
| if (ITALIC.equals(style.getFont().getStyle())) { | |||
| font.setItalic(true); | |||
| } | |||
| int fontSize = style.getFont().getSize(); | |||
| if (fontSize > 0) { | |||
| font.setFontHeightInPoints((short) fontSize); | |||
| } | |||
| if (BOLD.equals(style.getFont().getWeight())) { | |||
| font.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
| } | |||
| String fontFamily = style.getFont().getFamily(); | |||
| if (StringUtils.isNotBlank(fontFamily)) { | |||
| font.setFontName(fontFamily); | |||
| } | |||
| int color = style.getFont().getColor(); | |||
| if (color != 0 && color != BLACK.index) { | |||
| font.setColor((short) color); | |||
| } | |||
| if (UNDERLINE.equals(style.getFont().getDecoration())) { | |||
| font.setUnderline(Font.U_SINGLE); | |||
| } | |||
| cellStyle.setFont(font); | |||
| } | |||
| } | |||
| @@ -21,7 +21,7 @@ import org.apache.poi.ss.usermodel.CellStyle; | |||
| import org.apache.poi.ss.usermodel.Sheet; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToExcel; | |||
| import org.jeecgframework.poi.excel.html.css.ICssConvertToHtml; | |||
| import org.jeecgframework.poi.excel.html.entity.CellStyleEntity; | |||
| import org.jeecgframework.poi.excel.html.entity.style.CellStyleEntity; | |||
| import org.jeecgframework.poi.util.PoiCssUtils; | |||
| /** | |||
| @@ -0,0 +1,27 @@ | |||
| /** | |||
| * Copyright 2013-2017 JueYue (qrb.jueyue@gmail.com) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.excel.html.entity; | |||
| /** | |||
| * Excel 自定义处理的自定义Html标签 | |||
| * @author JueYue | |||
| * 2017年3月26日 | |||
| */ | |||
| public interface ExcelCssConstant { | |||
| public final String SHEET_NAME = "sheetName"; | |||
| } | |||
| @@ -1,5 +1,5 @@ | |||
| /** | |||
| * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) | |||
| * Copyright 2013-2017 JueYue (qrb.jueyue@gmail.com) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| @@ -37,6 +37,8 @@ public interface HtmlCssConstant { | |||
| public final String FONT_WEIGHT = "font-weight"; | |||
| public final String FONT_SIZE = "font-size"; | |||
| public final String FONT_FAMILY = "font-family"; | |||
| public final String TEXT_DECORATION = "text-decoration"; | |||
| public final String UNDERLINE = "underline"; | |||
| public final String ITALIC = "italic"; | |||
| public final String BOLD = "bold"; | |||
| public final String NORMAL = "normal"; | |||
| @@ -13,9 +13,7 @@ | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.excel.html.entity; | |||
| import org.apache.commons.lang3.builder.ReflectionToStringBuilder; | |||
| package org.jeecgframework.poi.excel.html.entity.style; | |||
| /** | |||
| * 边框样式 | |||
| @@ -13,9 +13,7 @@ | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.excel.html.entity; | |||
| import org.apache.commons.lang3.builder.ReflectionToStringBuilder; | |||
| package org.jeecgframework.poi.excel.html.entity.style; | |||
| /** | |||
| * Cell 具有的样式 | |||
| @@ -47,6 +45,10 @@ public class CellStyleEntity { | |||
| * 垂直位置 | |||
| */ | |||
| private String vetical; | |||
| /** | |||
| * 字体设置 | |||
| */ | |||
| private CssStyleFontEnity font; | |||
| public String getWidth() { | |||
| return width; | |||
| @@ -96,10 +98,18 @@ public class CellStyleEntity { | |||
| this.vetical = vetical; | |||
| } | |||
| public CssStyleFontEnity getFont() { | |||
| return font; | |||
| } | |||
| public void setFont(CssStyleFontEnity font) { | |||
| this.font = font; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new StringBuilder().append(align).append(background).append(border).append(height) | |||
| .append(vetical).append(width).toString(); | |||
| .append(vetical).append(width).append(font).toString(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,93 @@ | |||
| /** | |||
| * Copyright 2013-2017 JueYue (qrb.jueyue@gmail.com) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package org.jeecgframework.poi.excel.html.entity.style; | |||
| /** | |||
| * 字体样式 | |||
| * @author JueYue | |||
| * 2017年3月26日 | |||
| */ | |||
| public class CssStyleFontEnity { | |||
| /** | |||
| * italic 浏览器会显示一个斜体的字体样式。 | |||
| */ | |||
| private String style; | |||
| /** | |||
| * bold 定义粗体字符 | |||
| */ | |||
| private String weight; | |||
| /** | |||
| * 仅支持**px获取不带px的数字大小 | |||
| */ | |||
| private int size; | |||
| private String family; | |||
| private String decoration; | |||
| private int color; | |||
| public String getStyle() { | |||
| return style; | |||
| } | |||
| public void setStyle(String style) { | |||
| this.style = style; | |||
| } | |||
| public String getWeight() { | |||
| return weight; | |||
| } | |||
| public void setWeight(String weight) { | |||
| this.weight = weight; | |||
| } | |||
| public int getSize() { | |||
| return size; | |||
| } | |||
| public void setSize(int size) { | |||
| this.size = size; | |||
| } | |||
| public String getFamily() { | |||
| return family; | |||
| } | |||
| public void setFamily(String family) { | |||
| this.family = family; | |||
| } | |||
| public int getColor() { | |||
| return color; | |||
| } | |||
| public void setColor(int color) { | |||
| this.color = color; | |||
| } | |||
| public String getDecoration() { | |||
| return decoration; | |||
| } | |||
| public void setDecoration(String decoration) { | |||
| this.decoration = decoration; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new StringBuilder().append(style).append(decoration).append(color).append(family) | |||
| .append(size).append(weight).toString(); | |||
| } | |||
| } | |||
| @@ -132,26 +132,17 @@ public class PoiCssUtils { | |||
| /** | |||
| * parse color | |||
| * @param workBook work book | |||
| * @param color string color | |||
| * @return HSSFColor | |||
| * @return int | |||
| */ | |||
| public static HSSFColor parseColor(HSSFWorkbook workBook, String color) { | |||
| HSSFColor poiColor = null; | |||
| public static int parseColor(String color) { | |||
| if (StringUtils.isNotBlank(color)) { | |||
| Color awtColor = Color.decode(color); | |||
| if (awtColor != null) { | |||
| 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 awtColor.getRGB(); | |||
| } | |||
| } | |||
| return poiColor; | |||
| return 0; | |||
| } | |||
| // -- | |||