public PShading(CSSValue value) { CTShd shd = Context.getWmlObjectFactory().createCTShd(); // PrimitiveType 25 -> RGBCOLOR short ignored = 1; float fRed; float fGreen; float fBlue; CSSPrimitiveValue cssPrimitiveValue = (CSSPrimitiveValue) value; try { fRed = cssPrimitiveValue.getRGBColorValue().getRed().getFloatValue(ignored); fGreen = cssPrimitiveValue.getRGBColorValue().getGreen().getFloatValue(ignored); fBlue = cssPrimitiveValue.getRGBColorValue().getBlue().getFloatValue(ignored); shd.setFill(UnitsOfMeasurement.rgbTripleToHex(fRed, fGreen, fBlue)); } catch (UnsupportedOperationException e) { try { Class<?> xhtmlImporterClass = Class.forName("org.docx4j.convert.in.xhtml.FSColorToHexString"); Method rgbToHexMethod = xhtmlImporterClass.getMethod("rgbToHex", CSSPrimitiveValue.class); shd.setFill((String) rgbToHexMethod.invoke(null, cssPrimitiveValue)); } catch (Exception e2) { log.error("docx4j-XHTMLImport jar not found. Please add this to your classpath."); log.error(e2.getMessage(), e2); throw e; // same as before } } this.setObject(shd); }
/** * Fills table cell with given hex color * * @param cell * @param hexColor */ private void fillTableCell(Tc cell, String hexColor) { TcPr cellProps = cell.getTcPr(); if (null == cellProps) cellProps = objectFactory.createTcPr(); CTShd shd = objectFactory.createCTShd(); shd.setFill(hexColor); shd.setThemeFill(STThemeColor.BACKGROUND_2); cellProps.setShd(shd); cell.setTcPr(cellProps); }
protected Property createShading(int fgColor, int bgColor, int pctFg) { CTShd shd = null; Shading ret = null; int resColor = UnitsOfMeasurement.combineColors(fgColor, bgColor, pctFg); String hResColor = UnitsOfMeasurement.toHexColor(resColor); shd = Context.getWmlObjectFactory().createCTShd(); shd.setVal(STShd.CLEAR); shd.setFill(calcHexColor(resColor)); return new Shading(shd); }
private static boolean shadingChanged(CTShd currentShading, CTShd lastShading) { if (currentShading == null && lastShading == null) return false; if (currentShading == null && lastShading != null) return true; if (currentShading != null && lastShading == null) return true; // TODO: enhance this if (currentShading.getFill() == null || lastShading.getFill() == null) return true; return !currentShading.getFill().equals(lastShading.getFill()); }
private void setCellColor(Tc tableCell, String color) { if (color != null) { TcPr tableCellProperties = tableCell.getTcPr(); if (tableCellProperties == null) { tableCellProperties = new TcPr(); tableCell.setTcPr(tableCellProperties); } CTShd shd = new CTShd(); shd.setFill(color); tableCellProperties.setShd(shd); } }
protected void processAttributes(List<Property> properties, Element element) { CTShd shd = null; Shading shading = null; int bgColor = 0xffffff; // the background color of the page is assumed as white int fgColor = 0; // the default color of the font is assumed as black int pctPattern = -1; for (int i = 0; i < properties.size(); i++) { if (properties.get(i) instanceof Shading) { shd = (CTShd) properties.get(i).getObject(); fgColor = extractColor(shd.getColor(), 0); if ((shd.getVal() != null) && ("clear".equals(shd.getVal().value())) && ("auto".equals(shd.getFill()))) { // This is a reset to the background color of the page, // it is treated as an special case, as the background color // isn't inherited bgColor = 0xffffff; pctPattern = -2; } else { pctPattern = (shd.getVal() != null ? extractPattern(shd.getVal().value()) : -1); bgColor = extractColor(shd.getFill(), bgColor); } } } if (pctPattern == -1) { applyAttributes(properties, element); } else { properties.add(createShading(fgColor, bgColor, pctPattern)); applyAttributes(properties, element); properties.remove(properties.size() - 1); } }
protected void appendNoneBordersAndShading(List<Property> tableProperties) { CTBorder ctBrdr = null; CTShd shd = Context.getWmlObjectFactory().createCTShd(); ctBrdr = Context.getWmlObjectFactory().createCTBorder(); ctBrdr.setVal(STBorder.NONE); tableProperties.add(new BorderLeft(ctBrdr)); ctBrdr = Context.getWmlObjectFactory().createCTBorder(); ctBrdr.setVal(STBorder.NONE); tableProperties.add(new BorderRight(ctBrdr)); ctBrdr = Context.getWmlObjectFactory().createCTBorder(); ctBrdr.setVal(STBorder.NONE); tableProperties.add(new BorderTop(ctBrdr)); ctBrdr = Context.getWmlObjectFactory().createCTBorder(); ctBrdr.setVal(STBorder.NONE); tableProperties.add(new BorderBottom(ctBrdr)); shd.setColor("auto"); shd.setFill("auto"); shd.setVal(STShd.CLEAR); tableProperties.add(new Shading(shd)); }
@Override public void setXslFO(Element foElement) { CTShd shd = ((CTShd) this.getObject()); // TODO // STShd styleVal = shd.getVal(); if (shd.getColor() != null && !shd.getColor().equals("auto")) { log.warn("TODO support w:shd/@w:color=" + shd.getColor()); } // We just support fill color right now if (shd.getFill() != null && !shd.getFill().equals("auto")) { foElement.setAttribute(FO_NAME, "#" + shd.getFill()); } }
@Override public String getCssProperty() { CTShd shd = ((CTShd) this.getObject()); // TODO // STShd styleVal = shd.getVal(); if (shd.getColor() != null && !shd.getColor().equals("auto")) { log.warn("TODO support w:shd/@w:color=" + shd.getColor()); } // We just support fill color right now if (shd.getFill() != null && !shd.getFill().equals("auto")) { return composeCss(CSS_NAME, "#" + shd.getFill()); } else { return CSS_NULL; } }