/// <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); }
/// <summary> /// This method gets called when a start tag is encountered. /// </summary> /// <param name="uri"></param> /// <param name="lname"></param> /// <param name="name">the name of the tag that is encountered</param> /// <param name="attrs">the list of attributes</param> public override void StartElement(String uri, String lname, String name, Hashtable attrs) { itextProperties attributes = new itextProperties(); if (attrs != null) { foreach (string key in attrs.Keys) { attributes.Add(key, (string)attrs[key]); } } HandleStartingTags(name, attributes); }
/** * @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> /// This method parses a string with attributes and returns a itextProperties object. /// </summary> /// <param name="str">a string of this form: 'key1="value1"; key2="value2";... keyN="valueN" '</param> /// <returns>a itextProperties object</returns> public static itextProperties ParseAttributes(string str) { itextProperties result = new itextProperties(); if (str == null) { return(result); } StringTokenizer keyValuePairs = new StringTokenizer(str, ";"); StringTokenizer keyValuePair; string key; string value; while (keyValuePairs.HasMoreTokens()) { keyValuePair = new StringTokenizer(keyValuePairs.NextToken(), ":"); if (keyValuePair.HasMoreTokens()) { key = keyValuePair.NextToken().Trim().Trim(); } else { continue; } if (keyValuePair.HasMoreTokens()) { value = keyValuePair.NextToken().Trim(); } else { continue; } if (value.StartsWith("\"")) { value = value.Substring(1); } if (value.EndsWith("\"")) { value = value.Substring(0, value.Length - 1); } result.Add(key.ToLower(CultureInfo.InvariantCulture), value); } return(result); }
/// <summary> /// This method gets called when a start tag is encountered. /// </summary> /// <param name="uri"></param> /// <param name="lname"></param> /// <param name="name">the name of the tag that is encountered</param> /// <param name="attrs">the list of attributes</param> public override void StartElement(String uri, String lname, String name, Hashtable attrs) { if (myTags.ContainsKey(name)) { XmlPeer peer = (XmlPeer)myTags[name]; HandleStartingTags(peer.Tag, peer.GetAttributes(attrs)); } else { itextProperties attributes = new itextProperties(); if (attrs != null) { foreach (string key in attrs.Keys) { attributes.Add(key, (string)attrs[key]); } } HandleStartingTags(name, attributes); } }
public virtual void SetMarkupAttribute(String key, String value) { markupAttributes.Add(key, value); }
/** * 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> Creates new FontFactory </summary> public FontFactoryImp() { trueTypeFonts.Add(FontFactory.COURIER.ToLower(CultureInfo.InvariantCulture), FontFactory.COURIER); trueTypeFonts.Add(FontFactory.COURIER_BOLD.ToLower(CultureInfo.InvariantCulture), FontFactory.COURIER_BOLD); trueTypeFonts.Add(FontFactory.COURIER_OBLIQUE.ToLower(CultureInfo.InvariantCulture), FontFactory.COURIER_OBLIQUE); trueTypeFonts.Add(FontFactory.COURIER_BOLDOBLIQUE.ToLower(CultureInfo.InvariantCulture), FontFactory.COURIER_BOLDOBLIQUE); trueTypeFonts.Add(FontFactory.HELVETICA.ToLower(CultureInfo.InvariantCulture), FontFactory.HELVETICA); trueTypeFonts.Add(FontFactory.HELVETICA_BOLD.ToLower(CultureInfo.InvariantCulture), FontFactory.HELVETICA_BOLD); trueTypeFonts.Add(FontFactory.HELVETICA_OBLIQUE.ToLower(CultureInfo.InvariantCulture), FontFactory.HELVETICA_OBLIQUE); trueTypeFonts.Add(FontFactory.HELVETICA_BOLDOBLIQUE.ToLower(CultureInfo.InvariantCulture), FontFactory.HELVETICA_BOLDOBLIQUE); trueTypeFonts.Add(FontFactory.SYMBOL.ToLower(CultureInfo.InvariantCulture), FontFactory.SYMBOL); trueTypeFonts.Add(FontFactory.TIMES_ROMAN.ToLower(CultureInfo.InvariantCulture), FontFactory.TIMES_ROMAN); trueTypeFonts.Add(FontFactory.TIMES_BOLD.ToLower(CultureInfo.InvariantCulture), FontFactory.TIMES_BOLD); trueTypeFonts.Add(FontFactory.TIMES_ITALIC.ToLower(CultureInfo.InvariantCulture), FontFactory.TIMES_ITALIC); trueTypeFonts.Add(FontFactory.TIMES_BOLDITALIC.ToLower(CultureInfo.InvariantCulture), FontFactory.TIMES_BOLDITALIC); trueTypeFonts.Add(FontFactory.ZAPFDINGBATS.ToLower(CultureInfo.InvariantCulture), FontFactory.ZAPFDINGBATS); ArrayList tmp; tmp = new ArrayList(); tmp.Add(FontFactory.COURIER); tmp.Add(FontFactory.COURIER_BOLD); tmp.Add(FontFactory.COURIER_OBLIQUE); tmp.Add(FontFactory.COURIER_BOLDOBLIQUE); fontFamilies[FontFactory.COURIER.ToLower(CultureInfo.InvariantCulture)] = tmp; tmp = new ArrayList(); tmp.Add(FontFactory.HELVETICA); tmp.Add(FontFactory.HELVETICA_BOLD); tmp.Add(FontFactory.HELVETICA_OBLIQUE); tmp.Add(FontFactory.HELVETICA_BOLDOBLIQUE); fontFamilies[FontFactory.HELVETICA.ToLower(CultureInfo.InvariantCulture)] = tmp; tmp = new ArrayList(); tmp.Add(FontFactory.SYMBOL); fontFamilies[FontFactory.SYMBOL.ToLower(CultureInfo.InvariantCulture)] = tmp; tmp = new ArrayList(); tmp.Add(FontFactory.TIMES_ROMAN); tmp.Add(FontFactory.TIMES_BOLD); tmp.Add(FontFactory.TIMES_ITALIC); tmp.Add(FontFactory.TIMES_BOLDITALIC); fontFamilies[FontFactory.TIMES.ToLower(CultureInfo.InvariantCulture)] = tmp; fontFamilies[FontFactory.TIMES_ROMAN.ToLower(CultureInfo.InvariantCulture)] = tmp; tmp = new ArrayList(); tmp.Add(FontFactory.ZAPFDINGBATS); fontFamilies[FontFactory.ZAPFDINGBATS.ToLower(CultureInfo.InvariantCulture)] = tmp; }
/// <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)); }
/// <summary> /// Sets a value for an attribute. /// </summary> /// <param name="name">the iText tagname</param> /// <param name="value">the default value for this tag</param> public void AddValue(String name, String value) { attributeValues.Add(name, value); }
/// <summary> /// Sets an alias for an attribute. /// </summary> /// <param name="name">the iText tagname</param> /// <param name="alias">the custom tagname</param> public virtual void AddAlias(String name, String alias) { attributeAliases.Add(alias, name); }