2010-06-09 2 views
12

Есть ли официальный способ распространения (развертывания) определенного шрифта с помощью .NET-приложения?Внедрение/развертывание пользовательского шрифта в .NET-приложении

У нас есть (общественный домен) «СИД-шрифт», который печатает цифры с помощью ретро-инструментального вида. Это стандартный шрифт True Type или Open Type, как и любой другой, кроме того, что он выглядит фанки.

Очевидно, что для этого необходимо, чтобы этот шрифт находился на машине пользователя. Но мы предпочли бы не принуждать пользователя «устанавливать наш специальный шрифт в папку шрифтов». Мы предпочли бы либо загружать объект Font непосредственно из TTF, либо программно устанавливать шрифт так, чтобы он был доступен.

Как приложения обрабатывают такие вещи? Например, я заметил, что Adobe XYZ устанавливает различные шрифты в системе без вмешательства пользователя. Это то, что мы хотели бы сделать.

EDIT: хорошо, идеально, мы бы предпочли не установить шрифт непосредственно. Мы не хотим, чтобы наш элегантный тематический светодиодный шрифт появился в раскрывающемся списке шрифтов пользователя в MS Word. Мы предпочли бы использовать этот шрифт, но ограничиваем его использование или внешний вид в нашем приложении. Любой способ сделать это?

EDIT 2: Это приложение WinForms .NET 2.0.

Спасибо!

ответ

14

Я использую пользовательский шрифт для пользовательских графических-библиотека сайт 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).

+0

Спасибо , даже не знал, что это был * класс PrivateFontFamily. Это должно сделать это. –

+0

Ницца, прокомментируйте, если он действительно работает :) – Duckie

+0

Работает. По крайней мере, с тестовым шрифтом я просто попытался. Похоже, это точная цель этих классов. :) –

3

Для приложения WPF вы можете добавить его в список ресурсов.

См here

Вы просто должны установить действие сборки на ресурс, а затем ссылаться на него следующим образом:

<TextBlock FontFamily="./Resources/#Custom Font Name">

+0

Спасибо. Upvoted. Мне жаль, что я не могу использовать * WPF. К сожалению, это приложение является прямым Winforms. –

+0

Отличный совет !! Но он не работает для меня :(У меня был , и теперь я пытаюсь ссылаться, добавляя seguisym.ttf, а затем записывая

Смежные вопросы