从 Xamarin.Forms 使用 PdfSharp .Net Standard 预览加载字体失败:找不到合适的字体

Pau*_*her 6 android pdfsharp xamarin.forms

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

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

var font = new XFont("sans-serif", 20);
Run Code Online (Sandbox Code Playgroud)

它失败了,但有例外

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

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

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

编辑

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

Mar*_*mro 7

我遇到了类似的问题,我通过编写自己的实现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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后告诉 PDFSharp 使用它:

GlobalFontSettings.FontResolver = new FileFontResolver();
Run Code Online (Sandbox Code Playgroud)

  • 当线路出现故障时你会做什么?像这样的东西吗?`var font = new XFont(FontResolver("sans-serif", 20));` (2认同)