2017-03-09 3 views
1

Lorsque vous appelezErreur lors de l'appel PdfFontFactory.CreateFont, System.NotSupportedException: Le membre invoqué est pas pris en charge dans un ensemble dynamique C# WebApp

PdfFontFactory.CreateFont(FontConstants.HELVETICA); 

ou

PdfFontFactory.CreateFont(); 

dans une application web, cible cadre 4.0, je reçois erreur suivante.

[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 

Je pensais que je pouvais contourner le problème en utilisant uniquement

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

mais qui résulteront que dans un fichier PDF vide sans erreur cependant.

Quand je lance le même code dans un C# console app-je obtenir un fichier PDF valide avec toutes les polices. De plus, l'application de console C# cible .net 4, donc je suis assez convaincu que cela n'a rien à voir avec le framework cible. Merci pour vos commentaires.

+0

Il y a un bug dans la version C# de la bibliothèque. S'il vous plaît voir cette demande de tirage pour plus de détails comment fixer localement, ou attendez une solution de l'équipe iText: https://github.com/itext/itext7-dotnet/pull/2 –

+0

Merci, maintenant je comprends mon problème. –

Répondre

1

iText équipe a publié une version spéciale .NET7.0.2.2 avec le correctif pour le problème décrit. Cette version est essentiellement la version 7.0.2 avec le correctif. Il n'y aura pas 7.0.2.2 pour Java car le problème est survenu uniquement dans .NET dans certaines circonstances.

La nouvelle version 7.0.2.2 peut être téléchargée à partir de NuGet ou de iText Artifactory.

0

Pour iTextSharp:

  1. Téléchargez votre police préférée comme fichier * .ttf
  2. objet Create Font fichier:

    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); 
    
  3. Utilisez cet objet lorsque ajouter des éléments au document:

    var p = new Paragraph("hello there!", font); 
    doc.Add(p); 
    

Pour iText7 regarder cette example. Le format est très similaire, mais utilisez une autre classe pour créer la police:

PdfFont f1 = PdfFontFactory.createFont(ttf_file_path, "Cp1250", true); 
    Paragraph p1 = new Paragraph("Testing of letters").setFont(f1); 
    doc.add(p1); 
+0

Merci pour la réponse rapide depuis que vous avez posté dans iText5 Syntax, cela signifie-t-il que lorsque vous utilisez les pages Web de C#, il faut s'en tenir à iText5 plutôt qu'à iText7? –

+0

J'utilise iTextSharp (https://github.com/itext/itextsharp), iText est une autre bibliothèque de la même société (https://github.com/itext/itext7-dotnet). Je n'ai aucune expérience avec iText. –

+0

mettre à jour la réponse pour une autre bibliothèque –

1

Il existe un bogue dans la version C# de la bibliothèque. S'il vous plaît voir cette demande de traction pour les détails comment réparer localement, ou attendre une solution de l'équipe iText: github.com/itext/itext7-dotnet/pull/2 - Alexey Subach 9 mars à 18:20