static void Main(string[] args) { Console.WriteLine("Press enter to exit"); var factory = new Factory(); var fontCollection = factory.GetSystemFontCollection(false); var familyCount = fontCollection.FontFamilyCount; for (int i = 0; i < familyCount; i++) { var fontFamily = fontCollection.GetFontFamily(i); var familyNames = fontFamily.FamilyNames; int index; if (!familyNames.FindLocaleName(CultureInfo.CurrentCulture.Name, out index)) familyNames.FindLocaleName("en-us", out index); string name = familyNames.GetString(index); Console.WriteLine(name); var fontCount = fontFamily.FontCount; for (int fontIndex = 0; fontIndex < fontCount; fontIndex++) { var font = fontFamily.GetFont(fontIndex); var fontFace = new FontFace(font); var files = fontFace.GetFiles(); foreach (var file in files) { var referenceKey = file.GetReferenceKey(); var originalLoader = (FontFileLoaderNative)file.Loader; var loader = originalLoader.QueryInterface<LocalFontFileLoader>(); var fontFilePath = loader.GetFilePath(referenceKey); Console.WriteLine("\tFile path: {0}", fontFilePath); } } } Console.WriteLine("Press enter to exit"); Console.In.ReadLine(); }
public override string GetFontPath(AssetCompilerResult result = null) { using (var factory = new Factory()) { Font font; using (var fontCollection = factory.GetSystemFontCollection(false)) { int index; if (!fontCollection.FindFamilyName(FontName, out index)) { result?.Error("Cannot find system font '{0}'. Make sure it is installed on this machine.", FontName); return null; } using (var fontFamily = fontCollection.GetFontFamily(index)) { var weight = Style.IsBold() ? FontWeight.Bold : FontWeight.Regular; var style = Style.IsItalic() ? SharpDX.DirectWrite.FontStyle.Italic : SharpDX.DirectWrite.FontStyle.Normal; font = fontFamily.GetFirstMatchingFont(weight, FontStretch.Normal, style); if (font == null) { result?.Error("Cannot find style '{0}' for font family {1}. Make sure it is installed on this machine.", Style, FontName); return null; } } } var fontFace = new FontFace(font); // get the font path on the hard drive var file = fontFace.GetFiles().First(); var referenceKey = file.GetReferenceKey(); var originalLoader = (FontFileLoaderNative)file.Loader; var loader = originalLoader.QueryInterface<LocalFontFileLoader>(); return loader.GetFilePath(referenceKey); } }