是否有官方方法使用.NET应用程序分发(部署)特定字体?
我们有一个(公共领域)“LED字体”,用复古的LED仪表面打印数字。这是一种标准的True Type或Open Type字体,除了它看起来很时髦之外。
显然,为了工作,这个字体需要在用户的机器上。但我们宁愿不强迫用户“将我们的特殊字体安装到您的字体文件夹中”。我们更喜欢直接从TTF加载Font对象,或者以编程方式安装字体以便它可用。
应用程序如何处理这类事情?例如,我注意到Adobe XYZ在系统上安装了各种字体而无需用户干预。这就是我们想要做的事情。
编辑:好的,理想情况下,我们更喜欢不直接安装字体。我们不希望我们漂亮的主题LED字体显示在用户的MS Word字体下拉列表中。我们更喜欢使用此字体,但限制其使用或外观到我们的应用程序。有什么办法吗?
编辑2:这适用于WinForms .NET 2.0应用程序。
谢谢!
答案 0 :(得分:14)
我在asp.net网站上为自定义图形库使用自定义字体,但是 也可以在winform上运行而不会出现问题。您只需指定font-file,font-size和font-style,并返回font-type。
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上是否需要它)。
答案 1 :(得分:3)
对于WPF应用,您可以将其添加为资源。
请参阅here
您只需将构建操作设置为资源,然后按如下方式引用它:
<TextBlock FontFamily="./Resources/#Custom Font Name">