我正在转换使用System.Drawing.Text.PrivateFontCollection.AddFontFile()
的应用程序来管理应用程序使用的字体到WPF,所以我尝试使用System.Windows.Media.Fonts.GetFontFamilies()
来加载字体文件。
但我正在参加不匹配的FamilyNames。检查ttf文件表明PrivateFontCollection使用PostSript Fontfamily名称字段,该字段与Windows字体预览器显示的字段相同。然而,Media.Fonts似乎从Preferred Family和Preferred Styles字段的组合中获得姓氏。
短ScriptCS脚本以查看此效果:
#r "PresentationCore"
#r "System.Drawing"
using System.Windows.Media;
using System.Drawing.Text;
var files = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "*.TTF");
foreach (var f in files)
{
var privFontCol = new PrivateFontCollection();
privFontCol.AddFontFile(f);
var wpfFonts = Fonts.GetFontFamilies(f);
var fontsName = wpfFonts.First().FamilyNames.First().Value;
var privName = privFontCol.Families.First().Name;
if(fontsName == privName) continue;
System.Console.WriteLine(f);
System.Console.WriteLine("PrivFontCol: "+privName);
System.Console.WriteLine("Media.Fonts: " +fontsName);
}
大多数字体都不是问题,但是一些专有字体会导致重大问题,例如
C:\ Windows \字体\ NeutraDA.ttf
PrivFontCol:Neutra Text TT Demi Alt
Media.Fonts:Neutraface Text TT AltC:\ Windows \字体\ NeutraTextTT-Book.ttf
PrivFontCol:Neutra Text TT Book
Media.Fonts:Neutraface Text TT