Есть ли простой способ (в .Net) проверить, установлен ли шрифт на текущем компьютере?Проверка наличия шрифта
ответ
string fontName = "Consolas";
float fontSize = 12;
using (Font fontTester = new Font(
fontName,
fontSize,
FontStyle.Regular,
GraphicsUnit.Pixel))
{
if (fontTester.Name == fontName)
{
// Font exists
}
else
{
// Font doesn't exist
}
}
How do you get a list of all the installed fonts?
var fontsCollection = new InstalledFontCollection();
foreach (var fontFamiliy in fontsCollection.Families)
{
if (fontFamiliy.Name == fontName) ... \\ installed
}
См InstalledFontCollection class подробности.
Это самый «прямой» способ для меня, другие предлагаемые ответы больше похожи на обходные пути. –
@UgurTuran: Да, однако мне интересно о производительности? Не знал бы, пока не попытался, но кишка говорит, что другие быстрее из-за возможности иметь таблицы поиска. – Hans
Благодаря Джефф, я лучше читать документацию класса Font:
Если параметр FamilyName определяет шрифт, который не установлен на машине, на которой запущено приложение или не поддерживается, Microsoft Sans Сериф будет заменен.
В результате этого знания:
private bool IsFontInstalled(string fontName) {
using (var testFont = new Font(fontName, 8)) {
return 0 == string.Compare(
fontName,
testFont.Name,
StringComparison.InvariantCultureIgnoreCase);
}
}
Очевидно, что этот конструктор шрифтов предполагает FontStyle.Regular ... он работает только в том случае, если доступен стандартный стиль шрифта – jltrem
Уходя ответа GvS»:
private static bool IsFontInstalled(string fontName)
{
using (var testFont = new Font(fontName, 8))
return fontName.Equals(testFont.Name, StringComparison.InvariantCultureIgnoreCase);
}
Другие ответы предложили использовать Font
создание работать только если FontStyle.Regular
доступен. Некоторые шрифты, например, Verlag Bold, не имеют обычного стиля. Создание завершится с ошибкой Font 'Verlag Bold' не поддерживает стиль 'Regular'. Вам нужно будет проверить стили, которые потребуются вашему приложению. Решение следующее:
public static bool IsFontInstalled(string fontName)
{
bool installed = IsFontInstalled(fontName, FontStyle.Regular);
if (!installed) { installed = IsFontInstalled(fontName, FontStyle.Bold); }
if (!installed) { installed = IsFontInstalled(fontName, FontStyle.Italic); }
return installed;
}
public static bool IsFontInstalled(string fontName, FontStyle style)
{
bool installed = false;
const float emSize = 8.0f;
try
{
using (var testFont = new Font(fontName, emSize, style))
{
installed = (0 == string.Compare(fontName, testFont.Name, StringComparison.InvariantCultureIgnoreCase));
}
}
catch
{
}
return installed;
}
Вот как я бы это сделать:
private static bool IsFontInstalled(string name)
{
using (InstalledFontCollection fontsCollection = new InstalledFontCollection())
{
return fontsCollection.Families
.Any(x => x.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase));
}
}
Одна вещь, чтобы отметить с этим, что Name
свойство не всегда то, что можно было бы ожидать от поиска в C: \ WINDOWS \ Fonts. Например, у меня установлен шрифт, называемый «Арабский типсеттинг». IsFontInstalled("Arabic Typesetting Regular")
вернет false, но IsFontInstalled("Arabic Typesetting")
вернет true. («Арабский набор шрифтов» - это имя шрифта в средстве предварительного просмотра шрифтов Windows.)
Что касается ресурсов, я провел тест, где несколько раз вызывал этот метод, и тест заканчивался всего за несколько миллисекунд каждый раз. Моя машина немного перегружена, но, если вам не нужно будет запускать этот запрос очень часто, кажется, что производительность очень хорошая (и даже если вы это сделали, для этого используется кэширование).
- 1. проверка наличия шрифта постскриптума
- 2. Проверка наличия символа
- 3. Проверка наличия файла (Perl)
- 4. Проверка наличия документа
- 5. Проверка наличия формы
- 6. Проверка наличия метода Split
- 7. Проверка наличия стойки Наличие
- 8. Проверка наличия CRM-записи
- 9. cakephp - проверка наличия сеанса
- 10. Проверка наличия UIAppearance
- 11. Проверка наличия UIGraphicsBeginImageContextWithOptions
- 12. Swift: проверка наличия uitextfield
- 13. Помощь! Проверка наличия поля
- 14. jQuery - проверка наличия элементов
- 15. Проверка наличия url
- 16. Проверка наличия перегрузки сайта
- 17. Проверка наличия существует
- 18. Проверка наличия toString
- 19. Проверка наличия файла
- 20. Проверка наличия текстовых полей
- 21. Проверка наличия элемента
- 22. Java: проверка наличия файла
- 23. Проверка наличия базы данных?
- 24. Проверка наличия приложения
- 25. Проверка наличия общих предпочтений
- 26. treeview Проверка наличия узла
- 27. Проверка наличия элемента формы
- 28. Проверка наличия объекта arraylist
- 29. Проверка наличия файла JavaScript
- 30. Проверка наличия экземпляра NSConcreteMutableData
Это работает только в том случае, если доступен стандартный стиль шрифта – jltrem