2

我正在寻找一种方法来使用 .NET 框架查找给定字体的通用面孔名称(无衬线、衬线、等宽、草书、幻想)。我的首选语言是 C#,但我已经编写源代码近 15 年了,所以如果你能给我一个任何现代语言的例子,我可以自己翻译它。

[编辑-澄清]

我需要一种方法来确定任何给定对象属于哪个通用字体系列(Sans-Serif、Serif、Monospace、Cursive 或 Fantasy……甚至可能是 Symbol) 。System.Drawing.Font

例如,如果我从以下代码行创建字体:

System.Drawing.Font font = new System.Drawing.Font( "Serif", 12f, System.Drawing.GraphicsUnit.Point );

生成的字体可能是 12 磅的“Times New Roman”字体。但我不想要“Times”或“New Roman”甚至“Times New Roman”,我需要知道它在“Serif”家族中。

4

3 回答 3

2

你可以和linq

font是您正在寻找的 Microsoft的新列表。

例子:

  • 无衬线 衬线=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;
于 2013-02-22T02:26:27.430 回答
1

这是一种印刷字体分类,不能直接从 Windows 字体 api 函数中获得。一个可能的后门是 GetFontData(),它允许您直接访问字体的 TrueType 表。那里有很多信息,但是我不知道有这种确切的信息可用。您可以在表格的规格中自行查看。

于 2013-02-22T03:26:17.353 回答
0

一种查找给定字体的通用面孔名称的方法。

假设您有一个Font对象,您可以像这样获得字体系列名称:

Font font;
string familyName = font.FontFamily.Name;

回应您的编辑和评论:据我所知,没有关于字体类型的信息存储在字体中。例如,我可以设计一种字体并将其归类为 Fantasy,而您将字体归类为 Sans-serif。因为对于每个类的含义没有明确的定义,所以它不是字体的属性。

有一个系统范围的默认等宽字体、无衬线字体和衬线字体(通过FontFamily),但这不会告诉您是否有任何字体有衬线。使用font.Style你可以找出字体是否是草书,下划线等。通过这个答案,你可以找出字体是否是等宽的。

于 2013-02-22T01:51:22.677 回答