我有一个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框架中的任何选项(常规,粗体,斜体,下划线和删除线)。
无论如何,我都会收到以下错误:
Font'Sentinel Semibold'不支持'Regular'风格。
我该怎么办?如何在C#中使用semibold字体作为字体?另外,我可以以某种方式将我的TrueType字体转换为常规字体(如果这样可以解决问题)吗?
答案 0 :(得分:2)
正如您在this question的答案中所读到的,每个字体都有自己的属性(例如:启用Regular Style
或不启用),由字体创建者提供。
通过查看您的字体(即使只是通过查看其名称),似乎很明显它是一个子类型,其定义特征正好是(半)粗体和斜体;因此,没有删除这些功能的选项听起来合乎逻辑。如果你想要一个非粗体,非斜体的版本,你应该依赖于父系列(Sentinel)。
答案 1 :(得分: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];
}