public static String getCssForTableCells(HTMLConversionContext context, Tbl tbl, int idx) {

    StringBuffer result = new StringBuffer();
    PropertyResolver pr = context.getPropertyResolver();
    Style s = pr.getEffectiveTableStyle(tbl.getTblPr());

    result.append("#" + TableWriter.getId(idx) + " td { ");
    List<Property> properties = new ArrayList<Property>();
    if (s.getTblPr() != null && s.getTblPr().getTblBorders() != null) {
      TblBorders tblBorders = s.getTblPr().getTblBorders();
      if (tblBorders.getInsideH() != null) {
        if (tblBorders.getInsideH().getVal() == STBorder.NONE
            || tblBorders.getInsideH().getVal() == STBorder.NIL
            || tblBorders.getInsideH().getSz() == BigInteger.ZERO) {
          properties.add(new AdHocProperty("border-top-style", "none", null, null));
          properties.add(new AdHocProperty("border-top-width", "0mm", null, null));
          properties.add(new AdHocProperty("border-bottom-style", "none", null, null));
          properties.add(new AdHocProperty("border-bottom-width", "0mm", null, null));
        } else {
          properties.add(new BorderTop(tblBorders.getTop()));
          properties.add(new BorderBottom(tblBorders.getBottom()));
        }
      }
      if (tblBorders.getInsideV() != null) {
        if (tblBorders.getInsideV().getVal() == STBorder.NONE
            || tblBorders.getInsideV().getVal() == STBorder.NIL
            || tblBorders.getInsideV().getSz() == BigInteger.ZERO) {
          properties.add(new AdHocProperty("border-left-style", "none", null, null));
          properties.add(new AdHocProperty("border-left-width", "0mm", null, null));
          properties.add(new AdHocProperty("border-right-style", "none", null, null));
          properties.add(new AdHocProperty("border-right-width", "0mm", null, null));
        } else {
          properties.add(new BorderRight(tblBorders.getRight()));
          properties.add(new BorderLeft(tblBorders.getLeft()));
        }
      }
    }
    if (s.getTcPr() != null) {
      PropertyFactory.createProperties(properties, s.getTcPr());
    }
    // Ensure empty cells have a sensible height
    // TODO - this is no good with IE8, which doesn't treat this
    // as a minimum; it won't resize if there is more :-(
    properties.add(new AdHocProperty("height", "5mm", null, null));

    for (Property p : properties) {
      if (p != null) {
        result.append(p.getCssProperty());
      }
    }
    result.append("}\n");
    return result.toString();
  }
  protected void createCellProperties(List<Property> properties, CTTblPrBase tblPr) {
    TblBorders tblBorders = tblPr.getTblBorders();
    CTTblCellMar tblCellMargin = tblPr.getTblCellMar();
    if (tblBorders != null) {
      if (tblBorders.getInsideH() != null) {
        properties.add(new BorderTop(tblBorders.getTop()));
        properties.add(new BorderBottom(tblBorders.getBottom()));
      }
      if (tblBorders.getInsideV() != null) {
        properties.add(new BorderRight(tblBorders.getRight()));
        properties.add(new BorderLeft(tblBorders.getLeft()));
      }
    }

    if (tblCellMargin != null) {
      if (tblCellMargin.getTop() != null) properties.add(new CellMarginTop(tblCellMargin.getTop()));
      if (tblCellMargin.getBottom() != null)
        properties.add(new CellMarginBottom(tblCellMargin.getBottom()));
      if (tblCellMargin.getLeft() != null)
        properties.add(new CellMarginLeft(tblCellMargin.getLeft()));
      if (tblCellMargin.getRight() != null)
        properties.add(new CellMarginRight(tblCellMargin.getRight()));
    }
  }