2010-06-09 11 views
12

Gibt es eine offizielle Möglichkeit, eine bestimmte Schriftart mit einer .NET-Anwendung zu verteilen (bereitzustellen)?Einbetten/Bereitstellen benutzerdefinierter Schriftarten in .NET-Anwendung

Wir haben eine (öffentliche Domain) "LED-Schriftart", die Zahlen mit dem Retro-LED-Instrumentface-Look druckt. Dies ist eine Standard True Type oder Open Type Schriftart wie jede andere außer es sieht funky aus.

Damit dies funktioniert, muss diese Schriftart auf dem Computer des Benutzers sein. Aber wir würden es vorziehen, den Benutzer nicht zu zwingen, "unsere spezielle Schriftart in Ihren Schriftartordner zu installieren". Wir ziehen es vor, entweder ein Font-Objekt direkt aus dem TTF zu laden oder die Schriftart programmatisch so zu installieren, dass sie verfügbar ist.

Wie gehen Anwendungen mit solchen Dingen um? Ich stelle beispielsweise fest, dass Adobe XYZ verschiedene Schriftarten ohne Benutzereingriff auf dem System installiert. Das möchten wir gerne tun.

EDIT: Okay, ideal, würden wir nicht lieber die Schriftart direkt zu installieren. Wir möchten nicht, dass unsere nette thematische LED-Schriftart im Dropdown-Menü der Benutzer in MS Word angezeigt wird. Wir ziehen es vor, diese Schriftart zu verwenden, aber ihre Verwendung oder Darstellung auf unsere App zu beschränken. Irgendeine Möglichkeit, dies zu tun?

EDIT 2: Dies ist für eine WinForms .NET 2.0 App.

Danke!

Antwort

14

ich eine benutzerdefinierte Schriftart für meine eigene Grafiken-Bibliothek auf ein verwenden asp.net site, aber diese sollte auch auf winform ohne Probleme arbeiten. Sie geben nur die Font-Datei, die Font-Größe und die Schriftart an, und die Schriftart wird zurückgegeben.

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 ist eine einfache Struktur

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

Dies benötigt wird, um die Fontfamily zu verhindern GC'ed und die Schrift nicht funktioniert (asp.net sein, ich weiß nicht, ob es erforderlich ist, auf Winform).

+0

Danke , wusste nicht mal da * war * eine PrivateFontFamily-Klasse .Das sollte es tun. –

+0

Schön, bitte kommentiere wenn es tatsächlich funktioniert :) – Duckie

+0

Es klappt. Zumindest mit der Testschrift habe ich es gerade versucht. Scheint, dass dies der genaue Zweck dieser Klassen ist. :) –

3

Für eine WPF-App können Sie sie als Ressource hinzufügen.

Siehe here

Sie würden nur die Build-Aktion setzen müssen Ressourcen und dann Referenz wie folgt:

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

+0

Danke. Upvoted. Ich wünschte, ich könnte * WPF * benutzen. Leider ist diese App gerade Winforms. –

+0

Toller Tipp !! Aber es funktioniert nicht für mich :(Ich hatte und jetzt versuche ich zu referenzieren, indem ich seguisym.ttf hinzufüge und dann schreibe

Verwandte Themen