Beispiel #1
0
 /// <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));
             }
         }
     }
 }
Beispiel #2
0
 /// <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)
                              );
             }
         }
     }
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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());
        }
Beispiel #6
0
 /// <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);
         }
     }
 }
Beispiel #7
0
        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]);
            }
        }