在 .NET 应用程序中嵌入/部署自定义字体

发布于 2024-09-04 18:31:27 字数 505 浏览 5 评论 0原文

是否有官方方法可以使用 .NET 应用程序分发(部署)特定字体?

我们有一个(公共领域)“LED 字体”,可以用复古 LED 仪表面外观打印数字。这是一种标准的 True Type 或 Open Type 字体,与其他字体一样,只是它看起来很时髦。

显然,要使其发挥作用,该字体需要位于用户的计算机上。但我们不希望强迫用户“将我们的特殊字体安装到您的字体文件夹中”。我们更愿意直接从 TTF 加载 Font 对象,或者以编程方式安装字体以使其可用。

应用程序如何处理这类事情?例如,我注意到 Adob​​e XYZ 在系统上安装了各种字体,无需用户干预。这就是我们想做的。

编辑:好的,理想情况,我们不希望直接安装字体。我们不希望漂亮的主题 LED 字体出现在 MS Word 中用户的字体下拉列表中。我们更愿意使用此字体,但将其使用或外观限制在我们的应用程序中。有办法做到这一点吗?

编辑 2:这是针对 WinForms .NET 2.0 应用程序的。

谢谢!

Is there an official way to distribute (deploy) a specific font with a .NET application?

We have a (public domain) "LED font" that prints numbers with the retro LED instrumentface look. This is a standard True Type or Open Type font like any other except it looks funky.

Obviously for that to work, this font needs to be on the user's machine. But we'd prefer to not force the user to "install our special font into your font folder". We'd prefer to either load a Font object directly from the TTF, or programatically install the font so it's available.

How do applications handle this sort of things? Eg, I notice Adobe XYZ installs various fonts on the system without user intervention. That's what we'd like to do.

EDIT: okay, ideally, we'd prefer not to install the font directly. We don't want our nifty themed LED font showing up in the user's font dropdown in MS Word. We'd prefer to use this font, but restrict its use or appearance to our app. Any way to do this?

EDIT 2: This is for a WinForms .NET 2.0 app.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝色星空 2024-09-11 18:31:27

我在 asp.net 站点上为我的自定义图形库使用自定义字体,但这应该也可以在 winform 上正常工作。您只需指定字体文件、字体大小和字体样式,然后就会返回字体类型。

public static LoadedFont LoadFont(FileInfo file, int fontSize, FontStyle fontStyle)
{
    var fontCollection = new PrivateFontCollection();
    fontCollection.AddFontFile(file.FullName);
    if (fontCollection.Families.Length < 0)
    {
        throw new InvalidOperationException("No font familiy found when loading font");
    }

    var loadedFont = new LoadedFont();
    loadedFont.FontFamily = fontCollection.Families[0];
    loadedFont.Font = new Font(loadedFont.FontFamily, fontSize, fontStyle, GraphicsUnit.Pixel);
    return loadedFont;
}

LoadedFont 是一个简单的结构

public struct LoadedFont
{
    public Font Font { get; set; }
    public FontFamily FontFamily { get; set; }
}

,需要它来防止 FontFamily 被 GC 和字体无法工作(asp.net,我不知道 winform 上是否需要它)。

I use a custom font for my custom graphics-library on an asp.net site, but this should also work on winform without issues. You just specify the font-file, the font-size and the font-style, and the font-type is returned.

public static LoadedFont LoadFont(FileInfo file, int fontSize, FontStyle fontStyle)
{
    var fontCollection = new PrivateFontCollection();
    fontCollection.AddFontFile(file.FullName);
    if (fontCollection.Families.Length < 0)
    {
        throw new InvalidOperationException("No font familiy found when loading font");
    }

    var loadedFont = new LoadedFont();
    loadedFont.FontFamily = fontCollection.Families[0];
    loadedFont.Font = new Font(loadedFont.FontFamily, fontSize, fontStyle, GraphicsUnit.Pixel);
    return loadedFont;
}

LoadedFont is a simple struct

public struct LoadedFont
{
    public Font Font { get; set; }
    public FontFamily FontFamily { get; set; }
}

This is needed to prevent the FontFamily to be GC'ed and the font not working (asp.net, i do not know if it is needed on winform).

泼猴你往哪里跑 2024-09-11 18:31:27

对于 WPF 应用程序,您可以将其添加为资源。

请参阅此处

您只需将构建操作设置为资源,然后然后按如下方式引用它:

For a WPF app you can add it as a resource.

See here

You would just have to set the build action to resource and then reference it as follows:

<TextBlock FontFamily="./Resources/#Custom Font Name">

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文