Dot-Net

在 .NET 應用程序中嵌入/部署自定義字型

  • February 8, 2017

有沒有一種官方方法可以通過 .NET 應用程序分發(部署)特定字型?

我們有一個(公共領域)“LED 字型”,可以列印帶有復古 LED 儀表外觀的數字。這是一種標準的 True Type 或 Open Type 字型,除了看起來很時髦之外,其他任何字型都一樣。

顯然,要讓它工作,這個字型需要在使用者的機器上。但我們不希望強制使用者“將我們的特殊字型安裝到您的字型檔夾中”。我們更喜歡直接從 TTF 載入 Font 對象,或者以程式方式安裝字型以便它可用。

應用程序如何處理這類事情?例如,我注意到 Adob​​e XYZ 在沒有使用者干預的情況下在系統上安裝了各種字型。這就是我們想要做的。

編輯:好的,理想情況下,我們不希望直接安裝字型。我們不希望我們漂亮的主題 LED 字型出現在 MS Word 的使用者字型下拉列表中。我們更喜歡使用這種字型,但將其使用或外觀限制在我們的應用程序中。有什麼辦法可以做到這一點?

編輯 2:這是針對 WinForms .NET 2.0 應用程序的。

謝謝!

我在 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 上是否需要它)。

引用自:https://stackoverflow.com/questions/3007805