C# 创建新XFont时出现异常。PDFSharp Xamarin
当我调试我的应用程序时,我在创建XFont对象时遇到异常。你知道怎么了吗? 在我在github等上找到的所有示例中,它与下面的代码完全相同 System.TypeInitializationException:'的类型初始值设定项 “PdfSharpCore.Utils.FontResolver”引发了异常。”C# 创建新XFont时出现异常。PDFSharp Xamarin,c#,android,xamarin.forms,pdfsharp,C#,Android,Xamarin.forms,Pdfsharp,当我调试我的应用程序时,我在创建XFont对象时遇到异常。你知道怎么了吗? 在我在github等上找到的所有示例中,它与下面的代码完全相同 System.TypeInitializationException:'的类型初始值设定项 “PdfSharpCore.Utils.FontResolver”引发了异常。” 根据您的代码,我猜您使用的是PdfSharp.Xamarin.Forms库,现在您想为pdf使用自定义字体,对吗 如果是,请查看下面的代码,实现ifontesolver internal
根据您的代码,我猜您使用的是PdfSharp.Xamarin.Forms库,现在您想为pdf使用自定义字体,对吗 如果是,请查看下面的代码,实现ifontesolver
internal class FontProvider : IFontResolver
{
#region Properties
public string DefaultFontName
{
get { return "OpenSans"; }
}
#endregion
#region Fields
public ICustomFontProvider _fontProvider;
public static readonly string[] DefaultFontFiles = new string[]
{
"OpenSans-Regular.ttf",
"OpenSans-Bold.ttf",
"OpenSans-Italic.ttf",
"OpenSans-BoldItalic.ttf",
};
#endregion
#region Ctor
public FontProvider(ICustomFontProvider fontProvider)
{
_fontProvider = fontProvider;
}
#endregion
#region IFontResolver implementation
public byte[] GetFont(string faceName)
{
if (DefaultFontFiles.Contains(faceName) || _fontProvider == null)
{
var assembly = typeof(FontProvider).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream($"PdfSharp.Xamarin.Forms.DefaultFonts.{faceName}");
using (var reader = new StreamReader(stream))
{
var bytes = default(byte[]);
using (var memstream = new MemoryStream())
{
reader.BaseStream.CopyTo(memstream);
bytes = memstream.ToArray();
}
return bytes;
}
}
else
{
return _fontProvider.GetFont(faceName);
}
}
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
string fontName;
if (familyName == DefaultFontName || _fontProvider == null)
fontName = DefaultFontFiles[Convert.ToInt32(isBold) + 2 * Convert.ToInt32(isItalic)];
else
fontName = _fontProvider.ProvideFont(familyName, isBold, isItalic);
return new FontResolverInfo(fontName);
}
#endregion
}
您还可以编写我自己的IFontResolver实现,并将其分配给GlobalFontSettings.FontResolver
internal class FontProvider : IFontResolver
{
#region Properties
public string DefaultFontName
{
get { return "OpenSans"; }
}
#endregion
#region Fields
public ICustomFontProvider _fontProvider;
public static readonly string[] DefaultFontFiles = new string[]
{
"OpenSans-Regular.ttf",
"OpenSans-Bold.ttf",
"OpenSans-Italic.ttf",
"OpenSans-BoldItalic.ttf",
};
#endregion
#region Ctor
public FontProvider(ICustomFontProvider fontProvider)
{
_fontProvider = fontProvider;
}
#endregion
#region IFontResolver implementation
public byte[] GetFont(string faceName)
{
if (DefaultFontFiles.Contains(faceName) || _fontProvider == null)
{
var assembly = typeof(FontProvider).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream($"PdfSharp.Xamarin.Forms.DefaultFonts.{faceName}");
using (var reader = new StreamReader(stream))
{
var bytes = default(byte[]);
using (var memstream = new MemoryStream())
{
reader.BaseStream.CopyTo(memstream);
bytes = memstream.ToArray();
}
return bytes;
}
}
else
{
return _fontProvider.GetFont(faceName);
}
}
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
string fontName;
if (familyName == DefaultFontName || _fontProvider == null)
fontName = DefaultFontFiles[Convert.ToInt32(isBold) + 2 * Convert.ToInt32(isItalic)];
else
fontName = _fontProvider.ProvideFont(familyName, isBold, isItalic);
return new FontResolverInfo(fontName);
}
#endregion
}
请看下面的帖子:
根据您的代码,我猜您使用的是PdfSharp.Xamarin.Forms库,现在您想为pdf使用自定义字体,对吗 如果是,请查看下面的代码,实现ifontesolver
internal class FontProvider : IFontResolver
{
#region Properties
public string DefaultFontName
{
get { return "OpenSans"; }
}
#endregion
#region Fields
public ICustomFontProvider _fontProvider;
public static readonly string[] DefaultFontFiles = new string[]
{
"OpenSans-Regular.ttf",
"OpenSans-Bold.ttf",
"OpenSans-Italic.ttf",
"OpenSans-BoldItalic.ttf",
};
#endregion
#region Ctor
public FontProvider(ICustomFontProvider fontProvider)
{
_fontProvider = fontProvider;
}
#endregion
#region IFontResolver implementation
public byte[] GetFont(string faceName)
{
if (DefaultFontFiles.Contains(faceName) || _fontProvider == null)
{
var assembly = typeof(FontProvider).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream($"PdfSharp.Xamarin.Forms.DefaultFonts.{faceName}");
using (var reader = new StreamReader(stream))
{
var bytes = default(byte[]);
using (var memstream = new MemoryStream())
{
reader.BaseStream.CopyTo(memstream);
bytes = memstream.ToArray();
}
return bytes;
}
}
else
{
return _fontProvider.GetFont(faceName);
}
}
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
string fontName;
if (familyName == DefaultFontName || _fontProvider == null)
fontName = DefaultFontFiles[Convert.ToInt32(isBold) + 2 * Convert.ToInt32(isItalic)];
else
fontName = _fontProvider.ProvideFont(familyName, isBold, isItalic);
return new FontResolverInfo(fontName);
}
#endregion
}
您还可以编写我自己的IFontResolver实现,并将其分配给GlobalFontSettings.FontResolver
internal class FontProvider : IFontResolver
{
#region Properties
public string DefaultFontName
{
get { return "OpenSans"; }
}
#endregion
#region Fields
public ICustomFontProvider _fontProvider;
public static readonly string[] DefaultFontFiles = new string[]
{
"OpenSans-Regular.ttf",
"OpenSans-Bold.ttf",
"OpenSans-Italic.ttf",
"OpenSans-BoldItalic.ttf",
};
#endregion
#region Ctor
public FontProvider(ICustomFontProvider fontProvider)
{
_fontProvider = fontProvider;
}
#endregion
#region IFontResolver implementation
public byte[] GetFont(string faceName)
{
if (DefaultFontFiles.Contains(faceName) || _fontProvider == null)
{
var assembly = typeof(FontProvider).GetTypeInfo().Assembly;
Stream stream = assembly.GetManifestResourceStream($"PdfSharp.Xamarin.Forms.DefaultFonts.{faceName}");
using (var reader = new StreamReader(stream))
{
var bytes = default(byte[]);
using (var memstream = new MemoryStream())
{
reader.BaseStream.CopyTo(memstream);
bytes = memstream.ToArray();
}
return bytes;
}
}
else
{
return _fontProvider.GetFont(faceName);
}
}
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
string fontName;
if (familyName == DefaultFontName || _fontProvider == null)
fontName = DefaultFontFiles[Convert.ToInt32(isBold) + 2 * Convert.ToInt32(isItalic)];
else
fontName = _fontProvider.ProvideFont(familyName, isBold, isItalic);
return new FontResolverInfo(fontName);
}
#endregion
}
请看下面的帖子:
您是否能够解决此问题?我在Android上也有同样的问题,但在UWP上没有问题。你能解决这个问题吗?我在Android上也有同样的问题,但在UWP上没有问题。