Dot-Net
在 .NET 應用程序中嵌入/部署自定義字型
有沒有一種官方方法可以通過 .NET 應用程序分發(部署)特定字型?
我們有一個(公共領域)“LED 字型”,可以列印帶有復古 LED 儀表外觀的數字。這是一種標準的 True Type 或 Open Type 字型,除了看起來很時髦之外,其他任何字型都一樣。
顯然,要讓它工作,這個字型需要在使用者的機器上。但我們不希望強制使用者“將我們的特殊字型安裝到您的字型檔夾中”。我們更喜歡直接從 TTF 載入 Font 對象,或者以程式方式安裝字型以便它可用。
應用程序如何處理這類事情?例如,我注意到 Adobe 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 上是否需要它)。