/** * New method contributed by Lubos Strapko * @param h * @param cprops * @since 2.1.3 */ public static void InsertStyle(Hashtable h, ChainedProperties cprops) { String style = (String)h["style"]; if (style == null) { return; } Properties prop = Markup.ParseAttributes(style); foreach (String key in prop.Keys) { if (key.Equals(Markup.CSS_KEY_FONTFAMILY)) { h["face"] = prop[key]; } else if (key.Equals(Markup.CSS_KEY_FONTSIZE)) { float actualFontSize = Markup.ParseLength(cprops[ElementTags.SIZE], Markup.DEFAULT_FONT_SIZE); if (actualFontSize <= 0f) { actualFontSize = Markup.DEFAULT_FONT_SIZE; } h[ElementTags.SIZE] = Markup.ParseLength(prop[key], actualFontSize).ToString(NumberFormatInfo.InvariantInfo) + "pt"; } else if (key.Equals(Markup.CSS_KEY_FONTSTYLE)) { String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture); if (ss.Equals("italic") || ss.Equals("oblique")) { h["i"] = null; } } else if (key.Equals(Markup.CSS_KEY_FONTWEIGHT)) { String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture); if (ss.Equals("bold") || ss.Equals("700") || ss.Equals("800") || ss.Equals("900")) { h["b"] = null; } } else if (key.Equals(Markup.CSS_KEY_TEXTDECORATION)) { String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture); if (ss.Equals(Markup.CSS_VALUE_UNDERLINE)) { h["u"] = null; } } else if (key.Equals(Markup.CSS_KEY_COLOR)) { BaseColor c = Markup.DecodeColor(prop[key]); if (c != null) { int hh = c.ToArgb() & 0xffffff; String hs = "#" + hh.ToString("X06", NumberFormatInfo.InvariantInfo); h["color"] = hs; } } else if (key.Equals(Markup.CSS_KEY_LINEHEIGHT)) { String ss = prop[key].Trim(); float actualFontSize = Markup.ParseLength(cprops[ElementTags.SIZE], Markup.DEFAULT_FONT_SIZE); if (actualFontSize <= 0f) { actualFontSize = Markup.DEFAULT_FONT_SIZE; } float v = Markup.ParseLength(prop[key], actualFontSize); if (ss.EndsWith("%")) { v /= 100; h["leading"] = "0," + v.ToString(NumberFormatInfo.InvariantInfo); } else if (Util.EqualsIgnoreCase("normal", ss)) { h["leading"] = "0,1.5"; } else { h["leading"] = v.ToString(NumberFormatInfo.InvariantInfo) + ",0"; } } else if (key.Equals(Markup.CSS_KEY_TEXTALIGN)) { String ss = prop[key].Trim().ToLower(System.Globalization.CultureInfo.InvariantCulture); h["align"] = ss; } else if (key.Equals(Markup.CSS_KEY_PADDINGLEFT)) { String ss = prop[key].Trim().ToLower(System.Globalization.CultureInfo.InvariantCulture); h["indent"] = ss; } } }
/** * Method contributed by Lubos Strapko * @param h * @param chain * @since 2.1.3 */ public static void ResolveStyleAttribute(IDictionary <String, String> h, ChainedProperties chain) { String style; h.TryGetValue(HtmlTags.STYLE, out style); if (style == null) { return; } Properties prop = HtmlUtilities.ParseAttributes(style); foreach (string key in prop.Keys) { if (key.Equals(HtmlTags.FONTFAMILY)) { h[HtmlTags.FACE] = prop[key]; } else if (key.Equals(HtmlTags.FONTSIZE)) { float actualFontSize = HtmlUtilities.ParseLength(chain[HtmlTags.SIZE], HtmlUtilities.DEFAULT_FONT_SIZE); if (actualFontSize <= 0f) { actualFontSize = HtmlUtilities.DEFAULT_FONT_SIZE; } h[HtmlTags.SIZE] = HtmlUtilities.ParseLength(prop[key], actualFontSize).ToString(CultureInfo.InvariantCulture) + "pt"; } else if (key.Equals(HtmlTags.FONTSTYLE)) { String ss = prop[key].Trim().ToLowerInvariant(); if (ss.Equals(HtmlTags.ITALIC) || ss.Equals(HtmlTags.OBLIQUE)) { h[HtmlTags.I] = null; } } else if (key.Equals(HtmlTags.FONTWEIGHT)) { String ss = prop[key].Trim().ToLowerInvariant(); if (ss.Equals(HtmlTags.BOLD) || ss.Equals("700") || ss.Equals("800") || ss.Equals("900")) { h[HtmlTags.B] = null; } } else if (key.Equals(HtmlTags.TEXTDECORATION)) { String ss = prop[key].Trim().ToLowerInvariant(); if (ss.Equals(HtmlTags.UNDERLINE)) { h[HtmlTags.U] = null; } } else if (key.Equals(HtmlTags.COLOR)) { BaseColor c = HtmlUtilities.DecodeColor(prop[key]); if (c != null) { int hh = c.ToArgb(); String hs = hh.ToString("x"); hs = "000000" + hs; hs = "#" + hs.Substring(hs.Length - 6); h[HtmlTags.COLOR] = hs; } } else if (key.Equals(HtmlTags.LINEHEIGHT)) { String ss = prop[key].Trim(); float actualFontSize = HtmlUtilities.ParseLength(chain[HtmlTags.SIZE], HtmlUtilities.DEFAULT_FONT_SIZE); if (actualFontSize <= 0f) { actualFontSize = HtmlUtilities.DEFAULT_FONT_SIZE; } float v = HtmlUtilities.ParseLength(prop[key], actualFontSize); if (ss.EndsWith("%")) { h[HtmlTags.LEADING] = "0," + v / 100; return; } if (Util.EqualsIgnoreCase(HtmlTags.NORMAL, ss)) { h[HtmlTags.LEADING] = "0,1.5"; return; } h[HtmlTags.LEADING] = v + ",0"; } else if (key.Equals(HtmlTags.TEXTALIGN)) { String ss = prop[key].Trim().ToLowerInvariant(); h[HtmlTags.ALIGN] = ss; } else if (key.Equals(HtmlTags.PADDINGLEFT)) { String ss = prop[key].Trim().ToLowerInvariant(); h[HtmlTags.INDENT] = HtmlUtilities.ParseLength(ss).ToString(CultureInfo.InvariantCulture); } } }
/** * This method isn't used by iText, but you can use it to analyze * the value of a style attribute inside a HashMap. * The different elements of the style attribute are added to the * HashMap as key-value pairs. * @param h a HashMap that should have at least a key named * style. After this method is invoked, more keys could be added. */ public static void InsertStyle(Dictionary <string, string> h) { String style; if (!h.TryGetValue("style", out style)) { return; } Properties prop = Markup.ParseAttributes(style); foreach (String key in prop.Keys) { if (key.Equals(Markup.CSS_KEY_FONTFAMILY)) { h["face"] = prop[key]; } else if (key.Equals(Markup.CSS_KEY_FONTSIZE)) { h["size"] = Markup.ParseLength(prop[key]).ToString(NumberFormatInfo.InvariantInfo) + "pt"; } else if (key.Equals(Markup.CSS_KEY_FONTSTYLE)) { String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture); if (ss.Equals("italic") || ss.Equals("oblique")) { h["i"] = null; } } else if (key.Equals(Markup.CSS_KEY_FONTWEIGHT)) { String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture); if (ss.Equals("bold") || ss.Equals("700") || ss.Equals("800") || ss.Equals("900")) { h["b"] = null; } } else if (key.Equals(Markup.CSS_KEY_TEXTDECORATION)) { String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture); if (ss.Equals(Markup.CSS_VALUE_UNDERLINE)) { h["u"] = null; } } else if (key.Equals(Markup.CSS_KEY_COLOR)) { BaseColor c = Markup.DecodeColor(prop[key]); if (c != null) { int hh = c.ToArgb() & 0xffffff; String hs = "#" + hh.ToString("X06", NumberFormatInfo.InvariantInfo); h["color"] = hs; } } else if (key.Equals(Markup.CSS_KEY_LINEHEIGHT)) { String ss = prop[key].Trim(); float v = Markup.ParseLength(prop[key]); if (ss.EndsWith("%")) { v /= 100; h["leading"] = "0," + v.ToString(NumberFormatInfo.InvariantInfo); } else if (Util.EqualsIgnoreCase("normal", ss)) { h["leading"] = "0,1.5"; } else { h["leading"] = v.ToString(NumberFormatInfo.InvariantInfo) + ",0"; } } else if (key.Equals(Markup.CSS_KEY_TEXTALIGN)) { String ss = prop[key].Trim().ToLower(System.Globalization.CultureInfo.InvariantCulture); h["align"] = ss; } } }