我正在寻找一种方法来使用.NET框架找到给定字体的通用面名(Sans-Serif,Serif,Monospace,Cursive,Fantasy)。我喜欢的语言是C#,但我已经编写了将近15年的源代码,所以如果你能用任何现代语言给我一个例子,我可以自己翻译它。
[编辑 - 澄清]
我需要一种方法来确定哪个通用字体系列(Sans-Serif,Serif,Monospace,Cursive或Fantasy ......甚至可能是符号)给定System.Drawing.Font
对象属于。
例如,如果我从以下代码行创建一个字体:
System.Drawing.Font font = new System.Drawing.Font( "Serif", 12f, System.Drawing.GraphicsUnit.Point );
生成的字体可能是12点“Times New Roman”字体。但我不想要“时代”或“新罗马”甚至“新罗马时代”,我需要知道它是在“Serif”家族中。
答案 0 :(得分:2)
您可以使用linq
Here您要查找的Microsoft font
新列表。
示例:
Microsoft Sans Serif
Batang
var font = FontFamily.Families
.Where(c => c.Name == "Microsoft Sans Serif")
.FirstOrDefault();
<强>更新强>
你正在寻找Generics字体
http://msdn.microsoft.com/en-us/library/system.drawing.fontfamily.aspx
var font = FontFamily.GenericMonospace;
答案 1 :(得分:1)
这是一种印刷字体分类,无法直接从Windows字体api函数中获取。可能的后门是GetFontData(),它允许您直接访问字体的TrueType表。那里有很多信息,但我不知道这种确切的信息可用。您可以在表格的the specification中查看自己。
答案 2 :(得分:0)
查找给定字体的通用面名称的方法。
假设您有一个Font
对象,您可以获得如下字体系列名称:
Font font;
string familyName = font.FontFamily.Name;
要回复您的编辑和评论:据我所知,没有有关字体类型的信息存储在字体中。例如,我可以设计一种字体并将其归类为Fantasy,同时将字体分类为Sans-serif。因为每个类所包含的内容没有明确的定义,所以它不是字体的属性。
系统范围内有默认的monospace,sans-serif和serif字体(通过FontFamily
)但不会告诉你任何字体是否有serif。使用font.Style
,您可以了解字体是否为草书,带下划线等。通过this answer,您可以了解字体是否为等宽字体。