Brann
Brann

Reputation: 32376

How can I bundle a font with my .net winforms application?

I'd like to use a non-standard font for my .net 3.0 Winforms application.

This font might be installed on some of my user's computer, but it will clearly be missing on some others.

How can I ship the font with my program ? Do I need to install the font ? If so, is the lack of administrator privileges going to be an issue?

Upvotes: 3

Views: 3472

Answers (3)

Brian
Brian

Reputation: 38025

Here's a blog article I wrote that shows a way to embed fonts as resources in your application (no dll imports necessary :).

Embedding Fonts in your .Net Application

Here's the class I create where all the magic happens. The blog article includes instructions and an example of using it.

using System.Drawing;
using System.Drawing.Text;
using System.Runtime.InteropServices;
namespace EmbeddedFontsExample.Fonts
{
    public class ResFonts
    {
        private static PrivateFontCollection sFonts;
        static ResFonts()
        {
            sFonts = new PrivateFontCollection();
            // The order the fonts are added to the collection 
            // should be the same as the order they are added
            // to the ResFontFamily enum.
            AddFont(MyFonts.Consolas);
        }
        private static void AddFont(byte[] font)
        {
            var buffer = Marshal.AllocCoTaskMem(font.Length);
            Marshal.Copy(font, 0, buffer, font.Length);
            sFonts.AddMemoryFont(buffer, font.Length);
        }
        public static Font Create(
            ResFontFamily family, 
            float emSize, 
            FontStyle style = FontStyle.Regular, 
            GraphicsUnit unit = GraphicsUnit.Pixel)
        {
            var fam = sFonts.Families[(int)family];
            return new Font(fam, emSize, style, unit);
        }
    }
    public enum ResFontFamily
    {
        /// <summary>Consolas</summary>
        Consolas = 0
    }
}

Upvotes: 3

Brann
Brann

Reputation: 32376

This page explains in detail how to embed a font into a winforms project.

Upvotes: 1

Hans Passant
Hans Passant

Reputation: 941208

You'll have to use an installer to get the font registered on the target machine. But maybe you won't have to, GDI+ supports private fonts.

Upvotes: 3

Related Questions