【发布时间】:2010-12-10 16:34:29
【问题描述】:
我再次需要你的帮助。
我正在 C# 上开发一个使用自定义字体的小型应用程序。 问题是,字体必须事先安装在系统上。如果系统中不存在该字体,则仅使用 Times New Roman。 有没有办法将字体文件嵌入到应用程序中,这样就不需要在每个系统中都安装它了?
谢谢。
【问题讨论】:
我再次需要你的帮助。
我正在 C# 上开发一个使用自定义字体的小型应用程序。 问题是,字体必须事先安装在系统上。如果系统中不存在该字体,则仅使用 Times New Roman。 有没有办法将字体文件嵌入到应用程序中,这样就不需要在每个系统中都安装它了?
谢谢。
【问题讨论】:
如果您仍在阅读本文,我可能会指出您不必使用不安全代码从资源加载字体。这是一个使用 Marshal 的示例。
PrivateFontCollection _fonts = new PrivateFontCollection();
byte[] fontData = Resources.CustomFontResourceName;
IntPtr fontPtr = Marshal.AllocCoTaskMem(fontData.Length);
Marshal.Copy(fontData, 0, fontPtr, fontData.Length);
_fonts.AddMemoryFont(fontPtr, fontData.Length);
Marshal.FreeCoTaskMem(fontPtr);
Font customFont = new Font(_fonts.Families[0], 6.0F);
【讨论】:
unsafe 的人。
请注意,如果您使用 AddMemoryFont,则需要使用此 api 调用“AddFontMemResourceEx”,否则它将不起作用。
【讨论】: