调用 PdfFontFactory.CreateFont、System.NotSupportedException 时出错:C# WebApp 中的动态程序集不支持调用的成员
Error when calling PdfFontFactory.CreateFont, System.NotSupportedException: The invoked member is not supported in a dynamic assembly in c# WebApp
调用时
PdfFontFactory.CreateFont(FontConstants.HELVETICA);
或
PdfFontFactory.CreateFont();
在 Web 应用程序中,目标框架 4.0,出现以下错误。
[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
我认为我只能使用
解决这个问题
PdfFontFactory.Register(windows_fonts + "ARIAL.TTF", "Arial");
PdfFont Arial = PdfFontFactory.CreateRegisteredFont("Arial");
但这只会生成一个没有错误的空白 PDF。
当我 运行 在 c# 控制台应用程序中使用相同的代码时,我得到了包含所有字体的有效 PDF。
此外,c# 控制台应用程序的目标是 .net 4,因此我非常肯定它与目标框架无关。感谢您的任何反馈。
对于 iTextSharp:
- 将您喜欢的字体下载为 *.ttf 文件
从文件创建字体对象:
string path = Path.Combine(AppDataPath, "helvetica.ttf");
BaseFont baseFont = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont, fontSize, Font.NORMAL);
向文档添加元素时使用此对象:
var p = new Paragraph("hello there!", font);
doc.Add(p);
对于 iText7,看这个 example。格式非常相似,但使用另一个 class 创建字体:
PdfFont f1 = PdfFontFactory.createFont(ttf_file_path, "Cp1250", true);
Paragraph p1 = new Paragraph("Testing of letters").setFont(f1);
doc.add(p1);
C# 版本的库中存在错误。请参阅此拉取请求以了解如何在本地修复它的详细信息,或等待 iText 团队的修复:github.com/itext/itext7-dotnet/pull/2 – Alexey Subach 3 月 9 日在 18:20
iText 团队发布了一个特殊的 .NET
版本 7.0.2.2
,其中包含针对所述问题的修复。这个版本基本上只是 7.0.2
版本的修补程序。 Java不会有7.0.2.2
,因为在某些情况下问题只发生在.NET
。
新的 7.0.2.2
版本可以从 NuGet or from iText Artifactory 下载。
调用时
PdfFontFactory.CreateFont(FontConstants.HELVETICA);
或
PdfFontFactory.CreateFont();
在 Web 应用程序中,目标框架 4.0,出现以下错误。
[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
我认为我只能使用
解决这个问题PdfFontFactory.Register(windows_fonts + "ARIAL.TTF", "Arial");
PdfFont Arial = PdfFontFactory.CreateRegisteredFont("Arial");
但这只会生成一个没有错误的空白 PDF。
当我 运行 在 c# 控制台应用程序中使用相同的代码时,我得到了包含所有字体的有效 PDF。 此外,c# 控制台应用程序的目标是 .net 4,因此我非常肯定它与目标框架无关。感谢您的任何反馈。
对于 iTextSharp:
- 将您喜欢的字体下载为 *.ttf 文件
从文件创建字体对象:
string path = Path.Combine(AppDataPath, "helvetica.ttf"); BaseFont baseFont = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Font font = new Font(baseFont, fontSize, Font.NORMAL);
向文档添加元素时使用此对象:
var p = new Paragraph("hello there!", font); doc.Add(p);
对于 iText7,看这个 example。格式非常相似,但使用另一个 class 创建字体:
PdfFont f1 = PdfFontFactory.createFont(ttf_file_path, "Cp1250", true);
Paragraph p1 = new Paragraph("Testing of letters").setFont(f1);
doc.add(p1);
C# 版本的库中存在错误。请参阅此拉取请求以了解如何在本地修复它的详细信息,或等待 iText 团队的修复:github.com/itext/itext7-dotnet/pull/2 – Alexey Subach 3 月 9 日在 18:20
iText 团队发布了一个特殊的 .NET
版本 7.0.2.2
,其中包含针对所述问题的修复。这个版本基本上只是 7.0.2
版本的修补程序。 Java不会有7.0.2.2
,因为在某些情况下问题只发生在.NET
。
新的 7.0.2.2
版本可以从 NuGet or from iText Artifactory 下载。