如何在.NET框架中找到字体的通用名称?

时间:2013-02-22 01:47:27

标签: c# .net fonts

我正在寻找一种方法来使用.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”家族中。

3 个答案:

答案 0 :(得分:2)

您可以使用linq

Here您要查找的Microsoft font新列表。

示例:

  • Sans-Serif Serif = 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,您可以了解字体是否为等宽字体。