示例#1
0
        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);
            }
        }