How can I bundle a font with my .net winforms appl

2019-02-25 03:45发布

问题:

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?

回答1:

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.



回答2:

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
    }
}


回答3:

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