2010-06-09 18 views
12

Czy istnieje oficjalny sposób dystrybucji (wdrażania) określonej czcionki w aplikacji .NET?Osadzanie/wdrażanie czcionki niestandardowej w aplikacji .NET

Mamy (domena publiczną) "czcionkę LED", która drukuje cyfry z wyglądem retro instrumentów LED. Jest to standardowa czcionka True Type lub Open Type, tak jak każda inna, z tym że wygląda na funky.

Oczywiście, aby to działało, czcionka musi znajdować się na komputerze użytkownika. Ale wolimy nie zmuszać użytkownika do "zainstalowania naszej specjalnej czcionki w folderze czcionek". Wolimy albo załadować obiekt Font bezpośrednio z TTF, albo programowo zainstalować czcionkę, aby była dostępna.

Jak aplikacje obsługują tego typu rzeczy? Np. Zauważam, że Adobe XYZ instaluje różne czcionki w systemie bez interwencji użytkownika. Właśnie to chcielibyśmy zrobić.

EDIT: ok, idealnie, wolimy niż, aby zainstalować czcionkę bezpośrednio. Nie chcemy, aby nasza stylowa czcionka LED wyświetlała się w liście czcionek użytkownika w MS Word. Wolimy używać tej czcionki, ale ograniczamy jej użycie lub wygląd do naszej aplikacji. Jakikolwiek sposób to zrobić?

EDYCJA 2: Jest to aplikacja WinForms .NET 2.0.

Dzięki!

Odpowiedz

14

używam niestandardową czcionkę dla niestandardowej graficznej biblioteki na zasadzie Witryna asp.net, ale ta powinna również działać na Winform bez problemów. Po prostu określasz plik czcionki, rozmiar czcionki i styl czcionki, a typ czcionki jest zwracany.

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 to prosta struktura

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

Jest to konieczne, aby zapobiec fontFamily być GC'ed a czcionka nie działa (ASP.NET, ja nie wiem, czy to jest potrzebne na winform).

+0

, nawet nie wiedziałam, że * była * klasa PrivateFontFamily, to powinno wystarczyć –

+0

Dobrze, proszę, skomentuj, czy to rzeczywiście działa :) – Duckie

+0

To działa. Przynajmniej z testową czcionką, którą właśnie wypróbowałem. Wydaje się, że jest to dokładny cel tych zajęć. :) –

3

Dla aplikacji WPF można dodać ją jako zasób.

Zobacz here

byłoby po prostu trzeba ustawić akcję kompilacji do zasobów, a następnie odwołać go w następujący sposób:

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

+0

Dzięki. Rewizja. Chciałbym jak cholera mogę * użyć * WPF. Niestety ta aplikacja jest prosta WinForm. –

+0

Świetna rada !! Ale to nie działa dla mnie :(Miałem i teraz próbuję odwołać się dodając seguisym.ttf, a następnie pisząc . Próbowałem BuildAction: Zasoby, Osadzone zasoby i zawartość, ale żaden z nich nie działa. Powodem tego ręcznego włączenia jest to, że Windows 8 ma nowszą wersję czcionki z kilkoma ikonami, których potrzebuję również na klientach z systemem Windows 7. –

Powiązane problemy