Встраивание / развертывание пользовательского шрифта в приложении.NET
Существует ли официальный способ распространения (развертывания) определенного шрифта с помощью приложения.NET?
У нас есть (общественное достояние) "светодиодный шрифт", который печатает цифры в стиле ретро светодиодных приборов. Это стандартный шрифт True Type или Open Type, как и любой другой, за исключением того, что он выглядит необычно.
Очевидно, чтобы это работало, этот шрифт должен быть на компьютере пользователя. Но мы бы предпочли не заставлять пользователя "устанавливать наш специальный шрифт в вашу папку шрифтов". Мы бы предпочли либо загрузить объект Font непосредственно из TTF, либо программно установить шрифт, чтобы он был доступен.
Как приложения обрабатывают такие вещи? Например, я заметил, что Adobe XYZ устанавливает различные шрифты в системе без вмешательства пользователя. Это то, что мы хотели бы сделать.
РЕДАКТИРОВАТЬ: хорошо, в идеале, мы бы предпочли не устанавливать шрифт напрямую. Мы не хотим, чтобы наш стильный светодиодный шрифт отображался в выпадающем списке шрифтов пользователя в MS Word. Мы бы предпочли использовать этот шрифт, но ограничить его использование или внешний вид нашим приложением. Есть ли способ сделать это?
РЕДАКТИРОВАТЬ 2: Это для приложения WinForms .NET 2.0.
Спасибо!
2 ответа
Я использую пользовательский шрифт для своей пользовательской графической библиотеки на сайте asp.net, но это также должно работать на winform без проблем. Вы просто указываете файл шрифта, размер шрифта и стиль шрифта, и тип шрифта возвращается.
public static LoadedFont LoadFont(FileInfo file, int fontSize, FontStyle fontStyle)
{
var fontCollection = new PrivateFontCollection();
fontCollection.AddFontFile(file.FullName);
if (fontCollection.Families.Length < 0)
{
throw new InvalidOperationException("No font familiy found when loading font");
}
var loadedFont = new LoadedFont();
loadedFont.FontFamily = fontCollection.Families[0];
loadedFont.Font = new Font(loadedFont.FontFamily, fontSize, fontStyle, GraphicsUnit.Pixel);
return loadedFont;
}
LoadedFont - это простая структура
public struct LoadedFont
{
public Font Font { get; set; }
public FontFamily FontFamily { get; set; }
}
Это необходимо для предотвращения того, чтобы FontFamily был GC'ed и шрифт не работал (asp.net, я не знаю, нужен ли он на winform).
Для приложения WPF вы можете добавить его в качестве ресурса.
Смотрите здесь
Вам просто нужно установить действие сборки для ресурса, а затем сослаться на него следующим образом:
<TextBlock FontFamily="./Resources/#Custom Font Name">