/**
         * 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;
                }
            }
        }
Exemplo n.º 2
0
        /**
         * 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);
                }
            }
        }
Exemplo n.º 3
0
        /**
         * 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;
                }
            }
        }