C# - 如何在不安装字体的情况下使用自定义字体

10

我再次需要您的帮助。

我正在开发一个使用自定义字体的 C# 小应用程序。问题是,必须先在系统上安装该字体。如果系统中没有相应的字体,则会使用 Times New Roman 字体。是否有一种方法可以将字体文件嵌入到应用程序中,以便不需要在每个系统上都安装字体?

谢谢。


可能存在重复:https://dev59.com/AkzSa4cB1Zd3GeqPjA_V,https://dev59.com/m3A75IYBdhLWcg3w9-Ox,https://dev59.com/_XRB5IYBdhLWcg3wroyB - Cody Gray
2个回答

9
如果你还在阅读这篇文章,我可以指出你不必使用不安全的代码来从资源中加载字体。以下是一个使用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);

被接受的答案链接到的文章解释了这是一个选项,无论是对于VB.NET程序员还是那些不想在C#中使用unsafe的人。 - Cody Gray
@Cody,那么,我想这里有一个例子:)。 - Shibumi
当我在我的开发机上使用这种方法加载字体时,它只能使用.ttf字体而不能使用.otf字体。但是,当我将我的网站部署到云端(Windows Azure)时,它只能使用.otf字体而不能使用.ttf字体。这是为什么呢? - fireydude
2010年12月已经很久远了!我的猜测是不同的.NET版本/类型/配置?不同的操作系统设置?我认为你可能只是有另一个问题,而不是对这个问题的评论:)祝你好运! - Shibumi

1
请注意,如果您使用AddMemoryFont,则需要使用此API调用"AddFontMemResourceEx",否则它将无法工作。 < p > {{link1:PrivateFontCollection给我符号}} < / p>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接