【问题标题】:Loading a Font with PdfSharp .Net Standard preview from Xamarin.Forms fails: No appropriate font found从 Xamarin.Forms 加载带有 PdfSharp .Net 标准预览的字体失败:找不到合适的字体
【发布时间】:2018-02-08 06:49:44
【问题描述】:

我目前正在评估如何从 Xamarin.Forms 生成 PDF(目前仅在 Android 上运行该应用程序)并检查.NET Standard port of PdfSharp

绘制到 PDF 并显示它有效,但我在将文本写入文档时遇到问题。当我尝试使用以下代码加载XFont

var font = new XFont("sans-serif", 20);

异常失败

System.InvalidOperationException:找不到合适的字体。

根据these 示例,它应该以这种方式工作,但它们适用于 PdfSharp.Xamarin 而不是 PdfSharp .NET Standard。根据this answer "sans-serif" 字体系列应该是正确的,但我拼命尝试了其他选项,如"Roboto",但无济于事。

.NET Standard 的 PdfSharp 是否与 Xamarin 完全兼容? (它将 PdfSharp.Xamarin 列为创建它的源,因此我假设它。)还有什么我错过的吗?

编辑

我尝试了 PdfSharp.Xamarin,它确实有效。显然这是 .NET Standard 端口的问题。

【问题讨论】:

    标签: android xamarin.forms pdfsharp


    【解决方案1】:

    我遇到了类似的问题,我通过编写自己的 IFontResolver 实现并将其分配给 GlobalFontSettings.FontResolver 来解决它。

    public class FileFontResolver : IFontResolver // FontResolverBase
    {
        public string DefaultFontName => throw new NotImplementedException();
    
        public byte[] GetFont(string faceName)
        {
            using (var ms = new MemoryStream())
            {
                using (var fs = File.Open(faceName, FileMode.Open))
                {
                    fs.CopyTo(ms);
                    ms.Position = 0;
                    return ms.ToArray();
                }
            }
        }
    
        public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
        {
            if (familyName.Equals("Verdana", StringComparison.CurrentCultureIgnoreCase))
            {
                if (isBold && isItalic)
                {
                    return new FontResolverInfo("Fonts/Verdana-BoldItalic.ttf");
                }
                else if (isBold)
                {
                    return new FontResolverInfo("Fonts/Verdana-Bold.ttf");
                }
                else if (isItalic)
                {
                    return new FontResolverInfo("Fonts/Verdana-Italic.ttf");
                }
                else
                {
                    return new FontResolverInfo("Fonts/Verdana-Regular.ttf");
                }
            }
            return null;
        }
    }
    

    然后告诉 PDFSharp 使用它:

    GlobalFontSettings.FontResolver = new FileFontResolver();
    

    【讨论】:

    • 线路出现故障怎么办?像这样的东西? var font = new XFont(FontResolver("sans-serif", 20));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多