/** * @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); }
/// <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); }
/** * 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); }
/// <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)); }