1

我有一个 TrueType 字体,它是“Semibold”。我尝试在以下方法中使用它:

        private FontFamily GetFontFamily(string name)
        {
            PrivateFontCollection pfc = new PrivateFontCollection();
            var path = Server.MapPath("~/Static/webfont/" + name + ".ttf");
            pfc.AddFontFile(path);
            return pfc.Families[0];
        }

        private Font GetFont(string name, int size,FontStyle style)
        {
            return new Font(GetFontFamily(name), size, style);
        }

我在哪里提供我的字体名称,它会找到Sentinel-SemiboldItalic.ttf字体。作为一个FontStyle,我尝试在 .NET 框架中提供任何选项(常规、粗体、斜体、下划线和删除线)。

无论如何,我都会收到以下错误:

字体“Sentinel Semibold”不支持“Regular”样式。

我该怎么办?如何在 C# 中使用半粗体字体作为字体?另外,我能否以某种方式将我的 TrueType 字体转换为常规字体(如果这样可以解决问题)?

4

2 回答 2

2

正如您在此问题的答案中所读到的,每种字体都有其自己的属性(例如:启用Regular Style或不启用),由字体创建者提供。

通过查看您的字体(即使只是查看它的名称),它似乎是一种子类型,其定义特征正是(半)粗体和斜体;因此,没有删除这些功能的选项听起来是合乎逻辑的。如果你想要一个非粗体、非斜体的版本,你应该依赖父族(Sentinel)。

于 2013-08-07T09:44:18.303 回答
0

我也遇到了和你一样的问题。并且发现即使我们添加了 font[.ttf] 文件,在 privatefontcollection 中添加了不正确的字体。因此,我找到了这种情况的解决方法。这个问题会随机抛出。所以添加字体直到正确的字体被添加到私有字体集合中。

  private FontFamily GetFontFamily(string name)
    {
        PrivateFontCollection pfc = new PrivateFontCollection();
        var path = Server.MapPath("~/Static/webfont/" + name + ".ttf");
        pfc.AddFontFile(path);
**while (pfc.FontFamilies != null && pfc.Families.Length > 0 && (pfc.FontFamilies[0] as FontFamily).Name != "YourFontName")
        {
            pfc.Dispose();
            pfc = new PrivateFontCollection();
            GetFontFamily();
        }
        return pfc.Families[0];
    }
于 2019-11-26T04:28:40.790 回答