/// <summary>Adds @font-face fonts to the FontProvider.</summary> /// <param name="cssResolver">the css styles resolver</param> public virtual void AddFontFaceFonts(ICssResolver cssResolver) { if (cssResolver is SvgStyleResolver) { foreach (CssFontFaceRule fontFace in ((SvgStyleResolver)cssResolver).GetFonts()) { bool findSupportedSrc = false; CssFontFace ff = CssFontFace.Create(fontFace.GetProperties()); if (ff != null) { foreach (CssFontFace.CssFontFaceSrc src in ff.GetSources()) { if (CreateFont(ff.GetFontFamily(), src, fontFace.ResolveUnicodeRange())) { findSupportedSrc = true; break; } } } if (!findSupportedSrc) { LogManager.GetLogger(typeof(iText.Svg.Processors.Impl.Font.SvgFontProcessor)).Error(MessageFormatUtil.Format (iText.StyledXmlParser.LogMessageConstant.UNABLE_TO_RETRIEVE_FONT, fontFace)); } } } }
/// <summary>Adds @font-face fonts to the FontProvider.</summary> private void AddFontFaceFonts() { //TODO Shall we add getFonts() to ICssResolver? if (cssResolver is DefaultCssResolver) { foreach (CssFontFaceRule fontFace in ((DefaultCssResolver)cssResolver).GetFonts()) { bool findSupportedSrc = false; IList <CssDeclaration> declarations = fontFace.GetProperties(); CssFontFace ff = CssFontFace.Create(declarations); if (ff != null) { foreach (CssFontFace.CssFontFaceSrc src in ff.GetSources()) { if (CreateFont(ff.GetFontFamily(), src, fontFace.ResolveUnicodeRange())) { findSupportedSrc = true; break; } } } if (!findSupportedSrc) { logger.Error(MessageFormatUtil.Format(iText.Html2pdf.LogMessageConstant.UNABLE_TO_RETRIEVE_FONT, fontFace) ); } } } }
public virtual void CreateCssFontFaceNullFontFamilyTest() { IList <CssDeclaration> properties = new List <CssDeclaration>(); properties.Add(new CssDeclaration("font-family", "")); properties.Add(new CssDeclaration("src", "some_directory/droid-serif-italic.ttf")); CssFontFace fontFace = CssFontFace.Create(properties); NUnit.Framework.Assert.IsNull(fontFace); }
public virtual void CreateCssFontFaceNullSrcTest() { IList <CssDeclaration> properties = new List <CssDeclaration>(); properties.Add(new CssDeclaration("font-family", "Droid Italic")); properties.Add(new CssDeclaration("src", null)); CssFontFace fontFace = CssFontFace.Create(properties); NUnit.Framework.Assert.IsNull(fontFace); }
public virtual void CreateCssFontFaceTest() { IList <CssDeclaration> properties = new List <CssDeclaration>(); properties.Add(new CssDeclaration("font-family", "Droid Italic")); properties.Add(new CssDeclaration("src", "url(\"web-fonts/droid-serif-italic.ttf\")")); CssFontFace fontFace = CssFontFace.Create(properties); NUnit.Framework.Assert.IsNotNull(fontFace); NUnit.Framework.Assert.AreEqual("droid italic", fontFace.GetFontFamily()); IList <CssFontFace.CssFontFaceSrc> sources = fontFace.GetSources(); NUnit.Framework.Assert.IsNotNull(sources); NUnit.Framework.Assert.AreEqual(1, sources.Count); NUnit.Framework.Assert.AreEqual("web-fonts/droid-serif-italic.ttf", sources[0].GetSrc()); }
/// <summary>Creates a font and adds it to the context.</summary> /// <param name="fontFamily">the font family</param> /// <param name="src">the source of the font</param> /// <returns>true, if successful</returns> private bool CreateFont(String fontFamily, CssFontFace.CssFontFaceSrc src, Range unicodeRange) { if (!CssFontFace.IsSupportedFontFormat(src.GetFormat())) { return(false); } else { if (src.IsLocal()) { // to method with lazy initialization ICollection <FontInfo> fonts = context.GetFontProvider().GetFontSet().Get(src.GetSrc()); if (fonts.Count > 0) { foreach (FontInfo fi in fonts) { context.AddTemporaryFont(fi, fontFamily); } // return(true); } else { return(false); } } else { try { // Cache at resource resolver level only, at font level we will create font in any case. // The instance of fontProgram will be collected by GC if the is no need in it. byte[] bytes = context.GetResourceResolver().RetrieveBytesFromResource(src.GetSrc()); if (bytes != null) { FontProgram fp = FontProgramFactory.CreateFont(bytes, false); context.AddTemporaryFont(fp, PdfEncodings.IDENTITY_H, fontFamily, unicodeRange); return(true); } } catch (Exception) { } return(false); } } }
public virtual void ParseBase64SrcTest() { CssStyleSheet styleSheet = CssStyleSheetParser.Parse(new FileStream(sourceFolder + "srcs2.css", FileMode.Open , FileAccess.Read)); CssFontFaceRule fontFaceRule = (CssFontFaceRule)styleSheet.GetStatements()[0]; CssDeclaration src = fontFaceRule.GetProperties()[0]; NUnit.Framework.Assert.AreEqual("src", src.GetProperty(), "src expected"); String[] sources = CssFontFace.SplitSourcesSequence(src.GetExpression()); NUnit.Framework.Assert.AreEqual(8, sources.Length, "8 sources expected"); for (int i = 0; i < 6; i++) { Match m = iText.IO.Util.StringUtil.Match(CssFontFace.CssFontFaceSrc.UrlPattern, sources[i]); NUnit.Framework.Assert.IsTrue(m.Success, "Expression doesn't match pattern: " + sources[i]); } for (int i = 6; i < sources.Length; i++) { Match m = iText.IO.Util.StringUtil.Match(CssFontFace.CssFontFaceSrc.UrlPattern, sources[i]); NUnit.Framework.Assert.IsFalse(m.Success, "Expression matches pattern (though it shouldn't!): " + sources[ i]); } }