[英]Font does not support style 'Regular' - using Semibold fonts in C#
我有一个 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 字体转换为常规字体(如果这可以解决问题)?
正如您在此问题的答案中所读到的,每种字体都有自己的属性(例如:是否启用Regular Style
),由字体创建者提供。
通过查看您的字体(即使只是查看其名称),似乎很明显它是一个子类型,其定义特征正是(半)粗体和斜体; 因此,没有删除这些功能的选项听起来很合乎逻辑。 如果你想要一个非粗体、非斜体的版本,你应该依赖父族(Sentinel)。
我也和你一样面临同样的问题。 并发现即使我们添加了 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];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.