如何在.NET框架中找到字体的通用名称
本文关键字:字体 NET 框架 | 更新日期: 2023-09-27 18:00:33
我正在寻找一种方法,使用.NET框架为给定字体找到通用的人脸名称(Sans Serif、Serif、Monospace、Cursive、Fantasy)。我喜欢的语言是C#,但我已经写源代码将近15年了,所以如果你能给我一个现代语言的例子,我可以自己翻译。
[编辑-澄清]
我需要一种方法来确定任何给定的System.Drawing.Font
对象属于通用字体家族(Sans Serif、Serif、Monospace、Cursive或Fantasy…甚至可能是Symbol)中的哪一个。
例如,如果我从以下代码行创建字体:
System.Drawing.Font font = new System.Drawing.Font( "Serif", 12f, System.Drawing.GraphicsUnit.Point );
由此产生的字体可能是12点的"Times New Roman"字体。但我不想要"时代"、"新罗马"甚至"时代新罗马",我需要知道它属于"Serif"家族。
您可以使用linq
这是您正在寻找的微软font
的新列表。
示例:
-
无衬线
或
衬线=
Microsoft Sans Serif
-
单空间=
Batang
var font = FontFamily.Families
.Where(c => c.Name == "Microsoft Sans Serif")
.FirstOrDefault();
更新:
这里你正在寻找通用字体
http://msdn.microsoft.com/en-us/library/system.drawing.fontfamily.aspx
var font = FontFamily.GenericMonospace;
这是一种排版字体分类,不能直接从Windows字体api函数中获得。一个可能的后门是GetFontData(),它允许您直接访问字体的TrueType表。那里有很多信息,但我不知道有什么确切的信息。您可以在表格的规格中自行查找。
一种为给定字体查找通用人脸名称的方法。
假设你有一个Font
对象,你可以得到这样的字体家族名称:
Font font;
string familyName = font.FontFamily.Name;
FontFamily
文档- 构造字体
回复您的编辑和评论:据我所知,没有关于字体类型的信息存储在字体中。例如,我可以设计一种字体并将其归类为Fantasy,而您则将该字体归类为Sans-serif。因为没有明确定义每个类的含义,所以它不是字体的属性。
系统范围内有一个默认的单空格、无衬线和衬线字体(通过FontFamily
),但这不会告诉你任何字体是否有衬线。使用font.Style
,你可以发现一个字体是草书、下划线等。通过这个答案,你可以知道一个字体是否是单格的。