我正在从文件系统加载字体。
通常我的代码工作得很好,但是当我通过PrivateFontCollection加载字体时,加载的FontFamily的名称是字体中TypeFace的名称(我可以在Windows的字体预览器中的字体名称下看到)和不是FontFamily名称......
由于我有一些字体具有相同的字体名称,但我希望能够区分它们。任何人都知道如何获得真正的FontFamily名称?
public Dictionary<string, FontFamily> LoadFontsFromDirectory(string path)
{
Dictionary<string, FontFamily> foundFonts = new Dictionary<string, FontFamily>();
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;
}
答案 0 :(得分:3)
如果你想获得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并不是你真正想要的。