字体名称不匹配

时间:2016-05-13 16:32:57

标签: c# .net wpf fonts

我正在转换使用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 Alt

     

C:\ Windows \字体\ NeutraTextTT-Book.ttf
  PrivFontCol:Neutra Text TT Book
  Media.Fonts:Neutraface Text TT

0 个答案:

没有答案
相关问题