private void setRightOfBorder( final HtmlCell cell, final String key, final String value, final TableStyleValues values) { if (key.contains(CSS.Property.WIDTH)) { values.setBorderWidthRight(utils.parsePxInCmMmPcToPt(value)); } if (key.contains(CSS.Property.COLOR)) { values.setBorderColorRight(HtmlUtilities.decodeColor(value)); } else if (values.getBorderColorRight() == null) { values.setBorderColorRight(BaseColor.BLACK); } if (key.contains("style")) { // If any, which are the border styles in iText? simulate in the borderevent? if (values.getBorderWidthRight(false) == null) { values.setBorderWidthRight(2.25f); } } }
/** * Applies css to a HtmlCell * * @param cell the HtmlCell * @param t the tag with the styles * @param memory current margin memory * @param psc the {@link PageSize} container * @return a styled HtmlCell */ public HtmlCell apply( final HtmlCell cell, final Tag t, final MarginMemory memory, final PageSizeContainable psc) { Tag row = t.getParent(); while (row != null && !row.getName().equals(HTML.Tag.TR)) { row = row.getParent(); } Tag table = t.getParent(); while (table != null && !table.getName().equals(HTML.Tag.TABLE)) { table = table.getParent(); } final TableStyleValues values = Table.setBorderAttributeForCell(table); Map<String, String> css = t.getCSS(); String emptyCells = css.get(CSS.Property.EMPTY_CELLS); if (null != emptyCells && CSS.Value.HIDE.equalsIgnoreCase(emptyCells) && cell.getCompositeElements() == null) { cell.setBorder(Rectangle.NO_BORDER); } else { cell.setVerticalAlignment( Element.ALIGN_MIDDLE); // Default css behavior. Implementation of "vertical-align" style // further along. String vAlign = null; if (t.getAttributes().containsKey(HTML.Attribute.VALIGN)) { vAlign = t.getAttributes().get(HTML.Attribute.VALIGN); } else if (css.containsKey(HTML.Attribute.VALIGN)) { vAlign = css.get(HTML.Attribute.VALIGN); } else if (row != null) { if (row.getAttributes().containsKey(HTML.Attribute.VALIGN)) { vAlign = row.getAttributes().get(HTML.Attribute.VALIGN); } else if (row.getCSS().containsKey(HTML.Attribute.VALIGN)) { vAlign = row.getCSS().get(HTML.Attribute.VALIGN); } } if (vAlign != null) { if (vAlign.equalsIgnoreCase(CSS.Value.TOP)) { cell.setVerticalAlignment(Element.ALIGN_TOP); } else if (vAlign.equalsIgnoreCase(CSS.Value.BOTTOM)) { cell.setVerticalAlignment(Element.ALIGN_BOTTOM); } } String align = null; if (t.getAttributes().containsKey(HTML.Attribute.ALIGN)) { align = t.getAttributes().get(HTML.Attribute.ALIGN); } else if (css.containsKey(CSS.Property.TEXT_ALIGN)) { align = css.get(CSS.Property.TEXT_ALIGN); } if (align != null) { if (align.equalsIgnoreCase(CSS.Value.CENTER)) { cell.setHorizontalAlignment(Element.ALIGN_CENTER); } else if (align.equalsIgnoreCase(CSS.Value.RIGHT)) { cell.setHorizontalAlignment(Element.ALIGN_RIGHT); } else if (align.equalsIgnoreCase(CSS.Value.JUSTIFY)) { cell.setHorizontalAlignment(Element.ALIGN_JUSTIFIED); } } if (t.getAttributes().get(HTML.Attribute.WIDTH) != null || css.get(HTML.Attribute.WIDTH) != null) { cell.setFixedWidth( new WidthCalculator().getWidth(t, memory.getRootTags(), psc.getPageSize().getWidth())); } HeightCalculator heightCalc = new HeightCalculator(); Float height = heightCalc.getHeight(t, psc.getPageSize().getHeight()); if (height == null && row != null) { height = heightCalc.getHeight(row, psc.getPageSize().getHeight()); } if (height != null) { cell.setMinimumHeight(height); } String colspan = t.getAttributes().get(HTML.Attribute.COLSPAN); if (null != colspan) { cell.setColspan(Integer.parseInt(colspan)); } String rowspan = t.getAttributes().get(HTML.Attribute.ROWSPAN); if (null != rowspan) { cell.setRowspan(Integer.parseInt(rowspan)); } for (Entry<String, String> entry : css.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); cell.setUseBorderPadding(true); if (key.equalsIgnoreCase(CSS.Property.BACKGROUND_COLOR)) { values.setBackground(HtmlUtilities.decodeColor(value)); } else if (key.equalsIgnoreCase(CSS.Property.VERTICAL_ALIGN)) { if (value.equalsIgnoreCase(CSS.Value.TOP)) { cell.setVerticalAlignment(Element.ALIGN_TOP); cell.setPaddingTop(cell.getPaddingTop() + 6); } else if (value.equalsIgnoreCase(CSS.Value.BOTTOM)) { cell.setVerticalAlignment(Element.ALIGN_BOTTOM); cell.setPaddingBottom(cell.getPaddingBottom() + 6); } } else if (key.contains(CSS.Property.BORDER)) { if (key.contains(CSS.Value.TOP)) { setTopOfBorder(cell, key, value, values); } else if (key.contains(CSS.Value.BOTTOM)) { setBottomOfBorder(cell, key, value, values); } else if (key.contains(CSS.Value.LEFT)) { setLeftOfBorder(cell, key, value, values); } else if (key.contains(CSS.Value.RIGHT)) { setRightOfBorder(cell, key, value, values); } } else if (key.contains(CSS.Property.CELLPADDING) || key.contains(CSS.Property.PADDING)) { if (key.contains(CSS.Value.TOP)) { cell.setPaddingTop(cell.getPaddingTop() + utils.parsePxInCmMmPcToPt(value)); } else if (key.contains(CSS.Value.BOTTOM)) { cell.setPaddingBottom(cell.getPaddingBottom() + utils.parsePxInCmMmPcToPt(value)); } else if (key.contains(CSS.Value.LEFT)) { cell.setPaddingLeft(cell.getPaddingLeft() + utils.parsePxInCmMmPcToPt(value)); } else if (key.contains(CSS.Value.RIGHT)) { cell.setPaddingRight(cell.getPaddingRight() + utils.parsePxInCmMmPcToPt(value)); } } else if (key.contains(CSS.Property.TEXT_ALIGN)) { cell.setHorizontalAlignment(CSS.getElementAlignment(value)); } } cell.setPaddingLeft( cell.getPaddingLeft() + values.getHorBorderSpacing() + values.getBorderWidthLeft()); cell.setPaddingRight(cell.getPaddingRight() + values.getBorderWidthRight()); cell.setPaddingTop( cell.getPaddingTop() + values.getVerBorderSpacing() + values.getBorderWidthTop()); cell.setPaddingBottom(cell.getPaddingBottom() + values.getBorderWidthBottom()); } cell.setBorder(Rectangle.NO_BORDER); cell.setCellEvent(new CellSpacingEvent(values)); cell.setCellValues(values); return cell; }