首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建新XFont时出现异常。PDFSharp Xamarin

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

Stack Overflow用户
提问于 2020-05-10 13:46:12
回答 1查看 1.6K关注 0票数 1

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

System.TypeInitializationException:'PdfSharpCore.Utils.FontResolver‘的类型初始化程序抛出了一个例外。

代码语言:javascript
运行
复制
document.Info.Title = "created with pdfsharp";

// Create an empty page
PdfPage page = document.AddPage();

// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);

// Create a font
XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);

// Draw the text
gfx.DrawString("Test of PdfSharp on Android", font, 
                new XSolidBrush(XColor.FromArgb(0, 0, 0)), 
                10, 130);
// Save the document...
document.Save(Path.Combine(Path.GetTempPath(), Name));
EN

Stack Overflow用户

发布于 2020-05-11 07:30:34

根据您的代码,我猜您使用PdfSharp.Xamarin.Forms库,现在您想要使用自定义字体的pdf,对吗?

如果是,请查看以下代码,实现IFontResolver。

代码语言:javascript
运行
复制
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。

请看下面的帖子:

Loading a Font with PdfSharp .Net Standard preview from Xamarin.Forms fails: No appropriate font found

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61713071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档