示例#1
0
        /**
         * @see com.lowagie.text.xml.XmlPeer#getAttributes(org.xml.sax.Attributes)
         */
        public override itextProperties GetAttributes(Hashtable attrs)
        {
            itextProperties attributes = new itextProperties();

            attributes.AddAll(attributeValues);
            if (defaultContent != null)
            {
                attributes[ElementTags.ITEXT] = defaultContent;
            }
            if (attrs != null)
            {
                foreach (string key in attrs.Keys)
                {
                    attributes.Add(GetName(key).ToLower(CultureInfo.InvariantCulture), (string)attrs[key]);
                }
            }
            return(attributes);
        }
示例#2
0
        /// <summary> Gets the list of attributes of the peer. </summary>
        public virtual itextProperties GetAttributes(Hashtable attrs)
        {
            itextProperties attributes = new itextProperties();

            attributes.AddAll(attributeValues);
            if (defaultContent != null)
            {
                attributes.Add(ElementTags.ITEXT, defaultContent);
            }
            if (attrs != null)
            {
                foreach (string key in attrs.Keys)
                {
                    attributes.Add(GetName(key), (string)attrs[key]);
                }
            }
            return(attributes);
        }
示例#3
0
        /**
         * This method gets called when a start tag is encountered.
         *
         * @param   uri         the Uniform Resource Identifier
         * @param   lname       the local name (without prefix), or the empty string if Namespace processing is not being performed.
         * @param   name        the name of the tag that is encountered
         * @param   attrs       the list of attributes
         */

        public override void StartElement(String uri, String lname, String name, Hashtable attrs)
        {
            //System.err.Println("Start: " + name);

            // super.handleStartingTags is replaced with handleStartingTags
            // suggestion by Vu Ngoc Tan/Hop
            name = name.ToLower(CultureInfo.InvariantCulture);
            if (HtmlTagMap.IsHtml(name))
            {
                // we do nothing
                return;
            }
            if (HtmlTagMap.IsHead(name))
            {
                // we do nothing
                return;
            }
            if (HtmlTagMap.IsTitle(name))
            {
                // we do nothing
                return;
            }
            if (HtmlTagMap.IsMeta(name))
            {
                // we look if we can change the body attributes
                String meta    = null;
                String content = null;
                if (attrs != null)
                {
                    foreach (String attribute in attrs.Keys)
                    {
                        if (Util.EqualsIgnoreCase(attribute, HtmlTags.CONTENT))
                        {
                            content = (String)attrs[attribute];
                        }
                        else if (Util.EqualsIgnoreCase(attribute, HtmlTags.NAME))
                        {
                            meta = (String)attrs[attribute];
                        }
                    }
                }
                if (meta != null && content != null)
                {
                    bodyAttributes.Add(meta, content);
                }
                return;
            }
            if (HtmlTagMap.IsLink(name))
            {
                // we do nothing for the moment, in a later version we could extract the style sheet
                return;
            }
            if (HtmlTagMap.IsBody(name))
            {
                // maybe we could extract some info about the document: color, margins,...
                // but that's for a later version...
                XmlPeer peer = new XmlPeer(ElementTags.ITEXT, name);
                peer.AddAlias(ElementTags.TOP, HtmlTags.TOPMARGIN);
                peer.AddAlias(ElementTags.BOTTOM, HtmlTags.BOTTOMMARGIN);
                peer.AddAlias(ElementTags.RIGHT, HtmlTags.RIGHTMARGIN);
                peer.AddAlias(ElementTags.LEFT, HtmlTags.LEFTMARGIN);
                bodyAttributes.AddAll(peer.GetAttributes(attrs));
                HandleStartingTags(peer.Tag, bodyAttributes);
                return;
            }
            if (myTags.ContainsKey(name))
            {
                XmlPeer peer = (XmlPeer)myTags[name];
                if (ElementTags.TABLE.Equals(peer.Tag) || ElementTags.CELL.Equals(peer.Tag))
                {
                    itextProperties p = peer.GetAttributes(attrs);
                    String          value;
                    if (ElementTags.TABLE.Equals(peer.Tag) && (value = p[ElementTags.BORDERWIDTH]) != null)
                    {
                        if (float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo) > 0)
                        {
                            tableBorder = true;
                        }
                    }
                    if (tableBorder)
                    {
                        p.Add(ElementTags.LEFT, "true");
                        p.Add(ElementTags.RIGHT, "true");
                        p.Add(ElementTags.TOP, "true");
                        p.Add(ElementTags.BOTTOM, "true");
                    }
                    HandleStartingTags(peer.Tag, p);
                    return;
                }
                HandleStartingTags(peer.Tag, peer.GetAttributes(attrs));
                return;
            }
            itextProperties attributes = new itextProperties();

            if (attrs != null)
            {
                foreach (String attribute in attrs.Keys)
                {
                    attributes.Add(attribute.ToLower(CultureInfo.InvariantCulture), ((String)attrs[attribute]).ToLower(CultureInfo.InvariantCulture));
                }
            }
            HandleStartingTags(name, attributes);
        }
示例#4
0
        /// <summary>
        /// Constructs a Font-object.
        /// </summary>
        /// <param name="attributes">the attributes of a Font object</param>
        /// <returns>a Font object</returns>
        public virtual Font GetFont(itextProperties attributes)
        {
            string fontname = null;
            string encoding = defaultEncoding;
            bool   embedded = defaultEmbedding;
            float  size     = Font.UNDEFINED;
            int    style    = Font.NORMAL;
            Color  color    = null;
            string value    = attributes[Markup.HTML_ATTR_STYLE];

            if (value != null && value.Length > 0)
            {
                itextProperties styleAttributes = Markup.ParseAttributes(value);
                if (styleAttributes.Count == 0)
                {
                    attributes.Add(Markup.HTML_ATTR_STYLE, value);
                }
                else
                {
                    fontname = styleAttributes[Markup.CSS_KEY_FONTFAMILY];
                    if (fontname != null)
                    {
                        string tmp;
                        while (fontname.IndexOf(',') != -1)
                        {
                            tmp = fontname.Substring(0, fontname.IndexOf(','));
                            if (IsRegistered(tmp))
                            {
                                fontname = tmp;
                            }
                            else
                            {
                                fontname = fontname.Substring(fontname.IndexOf(',') + 1);
                            }
                        }
                    }
                    if ((value = styleAttributes[Markup.CSS_KEY_FONTSIZE]) != null)
                    {
                        size = Markup.ParseLength(value);
                    }
                    if ((value = styleAttributes[Markup.CSS_KEY_FONTWEIGHT]) != null)
                    {
                        style |= Font.GetStyleValue(value);
                    }
                    if ((value = styleAttributes[Markup.CSS_KEY_FONTSTYLE]) != null)
                    {
                        style |= Font.GetStyleValue(value);
                    }
                    if ((value = styleAttributes[Markup.CSS_KEY_COLOR]) != null)
                    {
                        color = Markup.DecodeColor(value);
                    }
                    attributes.AddAll(styleAttributes);
                }
            }
            if ((value = attributes[ElementTags.ENCODING]) != null)
            {
                encoding = value;
            }
            if ("true".Equals(attributes[ElementTags.EMBEDDED]))
            {
                embedded = true;
            }
            if ((value = attributes[ElementTags.FONT]) != null)
            {
                fontname = value;
            }
            if ((value = attributes[ElementTags.SIZE]) != null)
            {
                size = float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo);
            }
            if ((value = attributes[Markup.HTML_ATTR_STYLE]) != null)
            {
                style |= Font.GetStyleValue(value);
            }
            if ((value = attributes[ElementTags.STYLE]) != null)
            {
                style |= Font.GetStyleValue(value);
            }
            string r = attributes[ElementTags.RED];
            string g = attributes[ElementTags.GREEN];
            string b = attributes[ElementTags.BLUE];

            if (r != null || g != null || b != null)
            {
                int red   = 0;
                int green = 0;
                int blue  = 0;
                if (r != null)
                {
                    red = int.Parse(r);
                }
                if (g != null)
                {
                    green = int.Parse(g);
                }
                if (b != null)
                {
                    blue = int.Parse(b);
                }
                color = new Color(red, green, blue);
            }
            else if ((value = attributes[ElementTags.COLOR]) != null)
            {
                color = Markup.DecodeColor(value);
            }
            if (fontname == null)
            {
                return(GetFont(null, encoding, embedded, size, style, color));
            }
            return(GetFont(fontname, encoding, embedded, size, style, color));
        }