Search code examples
c#.netasp.net-webpagesitext7

Error when calling PdfFontFactory.CreateFont, System.NotSupportedException: The invoked member is not supported in a dynamic assembly in c# WebApp


When calling

PdfFontFactory.CreateFont(FontConstants.HELVETICA);

or

PdfFontFactory.CreateFont();

inside a web application, target framework 4.0, I get following error.

[NotSupportedException: The invoked member is not supported in a dynamic assembly.]
   System.Reflection.Emit.InternalAssemblyBuilder.get_Location() +52
   iText.IO.Util.ResourceUtil.<LoadITextResourceAssemblies>b__3(Assembly a) +30
   System.Linq.WhereSelectListIterator`2.MoveNext() +115
   System.Linq.Buffer`1..ctor(IEnumerable`1 source) +239
   System.Linq.Enumerable.ToArray(IEnumerable`1 source) +77
   iText.IO.Util.ResourceUtil.LoadITextResourceAssemblies() +172
   iText.IO.Util.ResourceUtil..cctor() +125

[TypeInitializationException: The type initializer for 'iText.IO.Util.ResourceUtil' threw an exception.]
   iText.IO.Font.Type1Parser.GetMetricsFile() +127
   iText.IO.Font.Type1Font.Process() +53
   iText.IO.Font.Type1Font..ctor(String metricsPath, String binaryPath, Byte[] afm, Byte[] pfb) +131
   iText.IO.Font.FontProgramFactory.CreateFont(String name, Byte[] fontProgram, Boolean cached) +381
   iText.Kernel.Font.PdfFontFactory.CreateFont(String fontProgram, String encoding) +29
   iText.Kernel.Font.PdfFontFactory.CreateFont(String fontProgram) +31
   PdfCreator.x(String pdf_file_name) in x.cs:165
   ASP.x_cshtml.Execute() in x.cshtml:40
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +196
   System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +68
   System.Web.WebPages.WebPage.ExecutePageHierarchy() +151
   System.Web.WebPages.StartPage.RunPage() +19
   System.Web.WebPages.StartPage.ExecutePageHierarchy() +62
   System.Web.WebPages.StartPage.RunPage() +19
   System.Web.WebPages.StartPage.ExecutePageHierarchy() +62
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76
   System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +114

I thought I could work around the problem only using

PdfFontFactory.Register(windows_fonts + "ARIAL.TTF", "Arial");
PdfFont Arial = PdfFontFactory.CreateRegisteredFont("Arial");

but that will result only in a blank PDF without an error though.

When I run the same code in a c# console app I get a valid PDF with all the fonts. Also the c# console app targets .net 4, so I am quite positive that it has nothing to do with the target framework. Thanks for any feedback.


Solution

  • iText team has released a special .NET version 7.0.2.2 with the fix for the described problem. This version is basically just the 7.0.2 version with the hotfix. There will be no 7.0.2.2 for Java because the problem only occurred in .NET in some circumstances.

    New 7.0.2.2 version can be downloaded from NuGet or from iText Artifactory.