【问题标题】:I am using MigraDoc and PdfSharp (.Net Standard), but when I'm trying to create a paragraph,I get an error: "No appropriate font found"我正在使用 MigraDoc 和 PdfSharp(.Net 标准),但是当我尝试创建段落时,出现错误:“找不到合适的字体”
【发布时间】:2019-09-29 17:55:48
【问题描述】:

我正在使用 MigraDoc 和 PdfSharp(.Net 标准),但是当我尝试创建 paragraph(section.AddParagraph("Text")) 时,我收到此错误:

“没有找到合适的字体”

例如,当我添加一个段落时:

section.AddParagraph("Text"); 

我收到此错误:

“没有找到合适的字体”

这可能与使用 PdfSharp/MigraDoc .NET 标准端口有关。如果您有任何解决方案,我将非常感激。

PS:对不起我的英语!

【问题讨论】:

  • 您不是在 Windows 下使用 MigraDoc 和 PDFsharp 的“官方”版本,而是在未命名的操作系统上使用未命名的端口。命名端口和版本可能有助于获取特定于平台的答案和特定于平台的示例代码。

标签: c# visual-studio xamarin pdfsharp migradoc


【解决方案1】:

检查IFontResolver 的实现,并确保仅使用字体解析器支持的字体。

另请参阅:
https://stackoverflow.com/a/29059207/162529
https://stackoverflow.com/a/36177630/162529

【讨论】:

    【解决方案2】:

    根据我的测试,我重现了错误信息,错误是由字体引起的。

    也许您在代码中使用了字体。

        Paragraph para = sec.AddParagraph("Text");//sec.AddParagraph();
            para.Format.Alignment = ParagraphAlignment.Justify;
            para.Format.Font.Name = "Tinos";
            para.Format.Font.Size = 12;
    

    我添加了两个 .net 标准包的引用。

    PDFSharp for .NET Standard 2.0 https://github.com/Didstopia/PDFSharp

    适用于 .NET 标准的 MigraDoc https://github.com/Connatix/MigraDoc

    例如,我使用 Font Tinos

    首先创建一个FontResolver类。

    public class FontResolver : IFontResolver
    {
        public string DefaultFontName => "Tinos";
    
        public byte[] GetFont(string faceName)
        {
            using (var ms = new MemoryStream())
            {
                var assembly = typeof(FontResolver).GetTypeInfo().Assembly;
                var resources = assembly.GetManifestResourceNames();
                var resourceName = resources.First(x => x == faceName);
                using (var rs = assembly.GetManifestResourceStream(resourceName))
                {
                    rs.CopyTo(ms);
                    ms.Position = 0;
                    return ms.ToArray();
                }
            }
        }
    
        public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
        {
            if (familyName.Equals("Tinos", StringComparison.CurrentCultureIgnoreCase))
            {
                if (isBold && isItalic)
                {
                    return new FontResolverInfo("Tinos-BoldItalic.ttf");
                }
                else if (isBold)
                {
                    return new FontResolverInfo("Tinos-Bold.ttf");
                }
                else if (isItalic)
                {
                    return new FontResolverInfo("Tinos-Italic.ttf");
                }
                else
                {
                    return new FontResolverInfo("Tinos-Regular.ttf");
                }
            }
            return null;
        }
    }
    

    您可以从以下链接获取 Tinos 字体文件。 https://github.com/Didstopia/PDFSharp/tree/master/Didstopia.PDFSharp.Tests/Fonts

    已更新:

    使用如下文件添加字体文件夹。

    并在代码中使用字体之前添加下面的代码以调用FontResolver

       if (GlobalFontSettings.FontResolver == null)
            {
                GlobalFontSettings.FontResolver = new FontResolver();
            }        
    

    【讨论】:

    • 我应该将字体放在与 Fontresolver.cs 相同的路径中吗?
    • 给我错误“序列不包含匹配元素”。究竟应该在哪里放置字体?
    • 我用字体文件夹和您在使用字体之前需要调用的代码更新了我的回复。请检查更新。
    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 2021-04-30
    • 2019-10-30
    • 2022-11-13
    • 2020-10-29
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多