Эта статья: Как встроить шрифт истинного типа показывает, как делать то, что вы просите в .NET.
Как встроить шрифт True Type
Некоторые приложения по эстетическим соображениям или по требованию
стиль, будет вставлять некоторые необычные шрифты, чтобы они всегда были там
при необходимости независимо от того, установлен ли шрифт на
система назначения.
Секрет этого двоякий. Сначала шрифт должен быть помещен в
ресурсы, добавив его в решение и пометив его как
встроенный ресурс. Во-вторых, во время выполнения шрифт загружается через
поток и хранится в объекте PrivateFontCollection для последующего использования.
В этом примере используется шрифт, который вряд ли будет установлен на вашем
система. Alpha Dance - это бесплатный шрифт True Type, доступный на
Коллекция бесплатных шрифтов. Этот шрифт был встроен в приложение
добавив его в решение и выбрав «встроенный ресурс»
построить действие в свойствах.
Как только файл был успешно включен в нужные вам ресурсы
предоставить объект PrivateFontCollection, в котором его хранить и
метод, с помощью которого он загружается в коллекцию. Лучшее место, чтобы сделать
это, вероятно, переопределение загрузки формы или обработчик события.
следующий список показывает процесс. Обратите внимание, как метод AddMemoryFont
используется. Требуется указатель на память, в которой находится шрифт
сохраняется как массив байтов. В C # мы можем использовать ключевое слово unsafe для
удобство, но VB должен использовать возможности классов маршала
неуправляемая обработка памяти. Последний вариант, конечно, открыт для C #
программисты, которым просто не нравится ключевое слово unsafe.
PrivateFontCollection pfc = new PrivateFontCollection ();
private void Form1_Load(object sender, System.EventArgs e)
{
Stream fontStream = this.GetType().Assembly.GetManifestResourceStream("embedfont.Alphd___.ttf");
byte[] fontdata = new byte[fontStream.Length];
fontStream.Read(fontdata,0,(int)fontStream.Length);
fontStream.Close();
unsafe
{
fixed(byte * pFontData = fontdata)
{
pfc.AddMemoryFont((System.IntPtr)pFontData,fontdata.Length);
}
}
}
Шрифты могут иметь только определенные доступные стили и
к сожалению, выбор стиля шрифта, который не существует, приведет к
исключение. Чтобы преодолеть это, шрифт может быть опрошен, чтобы увидеть, какие
стили доступны и могут использоваться только те, которые предоставляются шрифтом.
Следующий листинг демонстрирует, как шрифт Alpha Dance используется
проверка доступных стилей шрифтов и показ всех существующих.
Обратите внимание, что стили подчеркивания и зачеркивания являются псевдо-стилями.
построены механизмом рендеринга шрифтов и фактически не предоставляются
в форме глифа.
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
bool bold=false;
bool regular=false;
bool italic=false;
e.Graphics.PageUnit=GraphicsUnit.Point;
SolidBrush b = new SolidBrush(Color.Black);
float y=5;
System.Drawing.Font fn;
foreach(FontFamily ff in pfc.Families)
{
if(ff.IsStyleAvailable(FontStyle.Regular))
{
regular=true;
fn=new Font(ff,18,FontStyle.Regular);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(ff.IsStyleAvailable(FontStyle.Bold))
{
bold=true;
fn=new Font(ff,18,FontStyle.Bold);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(ff.IsStyleAvailable(FontStyle.Italic))
{
italic=true;
fn=new Font(ff,18,FontStyle.Italic);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(bold && italic)
{
fn=new Font(ff,18,FontStyle.Bold | FontStyle.Italic);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
fn=new Font(ff,18,FontStyle.Underline);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
fn=new Font(ff,18,FontStyle.Strikeout);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
}
b.Dispose();
}
На рисунке 2 показано приложение в действии.
См. Обработчик событий Form1_Paint, он показывает, как конкретно установить тип System.Drawing.Font. Он основан на использовании класса System.Drawing.Text.PrivateFontCollection.
Надеюсь, это поможет.