【问题标题】:C# - How to use a custom Font without installing it in the systemC# - 如何使用自定义字体而不将其安装在系统中
【发布时间】:2010-12-10 16:34:29
【问题描述】:

我再次需要你的帮助。

我正在 C# 上开发一个使用自定义字体的小型应用程序。 问题是,字体必须事先安装在系统上。如果系统中不存在该字体,则仅使用 Times New Roman。 有没有办法将字体文件嵌入到应用程序中,这样就不需要在每个系统中都安装它了?

谢谢。

【问题讨论】:

标签: c# fonts


【解决方案1】:

如果您仍在阅读本文,我可能会指出您不必使用不安全代码从资源加载字体。这是一个使用 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 然后,我想,这里有一个例子:)。
  • 当我使用这种方法在我的开发机器上加载字体时,它只适用于 .ttf 字体,不适用于 .otf 字体。当我将我的网站部署到云(windows azure)时,它仅适用于 .otf 字体,不适用于 .ttf 字体。这怎么可能?
  • 2010 年 12 月是很久以前的事了!我唯一的猜测是不同的 .NET 版本/口味/配置?不同的操作系统设置?我认为您可能只是有另一个问题,而不是对此发表评论:)。祝你好运!
【解决方案2】:

请注意,如果您使用 AddMemoryFont,则需要使用此 api 调用“AddFontMemResourceEx”,否则它将不起作用。

PrivateFontCollection giving me symbols

【讨论】:

    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多