public IBaseFont GetFontByName(string fontAndColorId) { string fontColor = string.Empty; string fontName = string.Empty; bool foundColor = GetColorFromFontName(ref fontColor, ref fontName, fontAndColorId); string combinedFontId = foundColor ? fontAndColorId : fontName; //if a color is set, it's a unique font IBaseFont font; Fonts.TryGetValue(combinedFontId, out font); //if the font is not found, but has a modified color, store it if (font == null && foundColor) { IBaseFont fontWithoutColor; Fonts.TryGetValue(fontName, out fontWithoutColor); if (fontWithoutColor != null) { if (fontWithoutColor is Models.Font) { font = Models.Font.CopyFont <Models.Font, Models.Font>((Models.Font)fontWithoutColor, combinedFontId); (font as BaseFont).SetColor(GetColor(fontColor)); } else if (fontWithoutColor is BaseFont) { font = BaseFont.CopyFont <BaseFont, BaseFont>((BaseFont)fontWithoutColor, combinedFontId); (font as BaseFont).SetColor(GetColor(fontColor)); } AddFont(font); } } return(font); }