从文件系统中的字体加载族(而不是字体)名称

我正在从文件系统加载字体。

通常我的代码工作得很好,但是当我通过PrivateFontCollection加载字体时,加载的FontFamily的名称是字体中TypeFace的名称(我可以在Windows的字体预览器中的字体名称下看到)而不是FontFamily名称…

因为我有一些字体具有相同的字体名称但另一种字体名称我希望能够区分它们。 任何人都知道如何获得真正的FontFamily名称?

public Dictionary LoadFontsFromDirectory(string path) { Dictionary foundFonts = new Dictionary(); if (!Directory.Exists(path)) throw new Exception("directory doesnt exist"); foreach(FileInfo fi in new DirectoryInfo(path).GetFiles("*.ttf")) { PrivateFontCollection fileFonts = new PrivateFontCollection(); fileFonts.AddFontFile(fi.FullName); if (!foundFonts.ContainsKey(fileFonts.Families[0].Name)) { //add the font only if this fontfamily doesnt exist yet FontFamily family = new FontFamily(String.Format("file:///{0}#{1}", fi.FullName, fileFonts.Families[0].Name)); foundFonts.Add(family.Name, family); } } return foundFonts; } 

如果你想得到FontFamily,而不是fileFonts.Families [0] .Name中的值,你可以在family.FamilyNames中找到它的文化:

 FontFamily family = new FontFamily(String.Format("file:///{0}#{1}", fi.FullName, fileFonts.Families[0].Name)); Console.WriteLine("\tFamilySource: {0}", family.Source); foreach (var x in family.FamilyNames) { Console.WriteLine("\tFamilyName: {0}", x); // <------ HERE } foreach (var y in family.FamilyTypefaces) { foreach (var z in y.AdjustedFaceNames) { Console.WriteLine("\tTypeface: {0}",z); } } 

样本输出:

 Arial FamilySource: file:///C:\Users\tim\Desktop\arial.ttf#Arial FamilyName: [en-us, Arial] Typeface: [en-us, Regular] Typeface: [en-us, Bold] Typeface: [en-us, Bold Oblique] Typeface: [en-us, Oblique] Arial FamilySource: file:///C:\Users\tim\Desktop\arialbd.ttf#Arial FamilyName: [en-us, Arial] Typeface: [en-us, Bold] Typeface: [en-us, Bold Oblique] Arial FamilySource: file:///C:\Users\tim\Desktop\arialbi.ttf#Arial FamilyName: [en-us, Arial] Typeface: [en-us, Bold Italic] Arial FamilySource: file:///C:\Users\tim\Desktop\ariali.ttf#Arial FamilyName: [en-us, Arial] Typeface: [en-us, Italic] Typeface: [en-us, Bold Italic] Arial Narrow FamilySource: file:///C:\Users\tim\Desktop\ARIALN.TTF#Arial Narrow FamilyName: [en-us, Arial] Typeface: [en-us, Condensed] Typeface: [en-us, Condensed Bold] Typeface: [en-us, Condensed Bold Oblique] Typeface: [en-us, Condensed Oblique] Arial Narrow FamilySource: file:///C:\Users\tim\Desktop\ARIALNB.TTF#Arial Narrow FamilyName: [en-us, Arial] Typeface: [en-us, Condensed Bold] Typeface: [en-us, Condensed Bold Oblique] Arial Narrow FamilySource: file:///C:\Users\tim\Desktop\ARIALNBI.TTF#Arial Narrow FamilyName: [en-us, Arial] Typeface: [en-us, Condensed Bold Italic] Arial Narrow FamilySource: file:///C:\Users\tim\Desktop\ARIALNI.TTF#Arial Narrow FamilyName: [en-us, Arial] Typeface: [en-us, Condensed Italic] Typeface: [en-us, Condensed Bold Italic] Arial Black FamilySource: file:///C:\Users\tim\Desktop\ariblk.ttf#Arial Black FamilyName: [en-us, Arial] Typeface: [en-us, Black] Typeface: [en-us, Black Oblique] 

也就是说,你的笔记“我有一些字体具有相同的字体名称但另一种字体名称,我希望能够区分它们”表明FontFamily并不是你真正想要的。