Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建新XFont时出现异常。PDFSharp Xamarin_C#_Android_Xamarin.forms_Pdfsharp - Fatal编程技术网

C# 创建新XFont时出现异常。PDFSharp Xamarin

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

当我调试我的应用程序时,我在创建XFont对象时遇到异常。你知道怎么了吗? 在我在github等上找到的所有示例中,它与下面的代码完全相同

System.TypeInitializationException:'的类型初始值设定项 “PdfSharpCore.Utils.FontResolver”引发了异常。”


根据您的代码,我猜您使用的是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上没有问题。