如何将字体与我的.net winforms应用程序捆绑在一起?

时间:2010-02-18 11:36:40

标签: .net winforms fonts

我想为我的.net 3.0 Winforms应用程序使用非标准字体。

这个字体可能安装在我的某些用户的计算机上,但在其他一些计算机上显然会丢失。

如何使用我的程序发送字体?我需要安装字体吗?如果是这样,缺少管理员权限会成为一个问题吗?

3 个答案:

答案 0 :(得分:3)

您必须使用安装程序才能获取目标计算机上注册的字体。但也许你不必,GDI +支持private fonts

答案 1 :(得分:3)

这是我写的一篇博客文章,展示了一种在应用程序中嵌入字体作为资源的方法(无需导入dll:)。

Embedding Fonts in your .Net Application

这是我创造的所有魔法所在的课程。博客文章包含说明和使用它的示例。

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

答案 2 :(得分:1)

This page详细解释了如何将字体嵌入winforms项目中。