Получить поддерживаемые символы шрифта - в C # - PullRequest
22 голосов
/ 17 сентября 2009

У меня есть сторонний шрифт с поддержкой японских символов, который мне нужно использовать для приложения. Всякий раз, когда символ не поддерживается этим шрифтом, часто видимый прямоугольник («символ по умолчанию») рисуется. Очевидно, что не все японские символы поддерживаются, потому что, если я попытаюсь нарисовать переводы, которые наш переводческий офис дал нам, будет много прямоугольников.

Мне нужно получать уведомления всякий раз, когда используется неподдерживаемый символ, чтобы я мог изменить шрифт для этого единственного символа (как это делает Word) или реализовать некоторую другую реакцию на это.

Есть идеи? Если бы я мог извлечь список символов Unicode из файла TTF, то я бы мог проверить, покрывается ли используемый символ этим списком. Но как я могу это сделать?

Ответы [ 2 ]

24 голосов
/ 17 сентября 2009

На основании этого ответа .

Обязательно указывайте PresentationCore.dll

Попробуйте использовать этот код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media;

namespace fontChecker
{
    class Program
    {
        static void Main(string[] args)
        {
            var families = Fonts.GetFontFamilies(@"C:\WINDOWS\Fonts\Arial.TTF");
            foreach (FontFamily family in families)
            {
                var typefaces = family.GetTypefaces();
                foreach (Typeface typeface in typefaces)
                {
                    GlyphTypeface glyph;
                    typeface.TryGetGlyphTypeface(out glyph);
                    IDictionary<int, ushort> characterMap = glyph.CharacterToGlyphMap;

                    foreach (KeyValuePair<int, ushort> kvp in characterMap)
                    {
                        Console.WriteLine(String.Format("{0}:{1}", kvp.Key, kvp.Value));
                    }

                }
            }
        }
    }
}

Выходное изображение удалено из-за замены ImageShack старого удаленного изображения рекламой.

0 голосов
/ 17 сентября 2009

Разве вы не можете просто вытащить его на карту символов и заметить диапазоны символов, которые не определены?

Вероятно, существует программный способ анализа TTF-файла для этой информации, но если это всего лишь один конкретный шрифт, то, вероятно, проще просто открыть карту символов, установить для группы значение «Поддиапазон Юникода и группа» с помощью «Japanese Hiragana / Katakana» и просто обратите внимание на определенные диапазоны.

...