示例#1
0
  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);
  }
示例#2
0
 /**
  * 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);
 }
示例#4
0
  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));
 }
示例#8
0
  @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());
    }
  }
示例#9
0
  @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;
    }
  }