2010-06-09 19 views
12

Esiste un modo ufficiale per distribuire (distribuire) un carattere specifico con un'applicazione .NET?Incorporamento/distribuzione di caratteri personalizzati nell'app .NET

Abbiamo un "carattere LED" (di dominio pubblico) che stampa i numeri con l'aspetto retroilluminato del LED. Questo è un font True Type standard o Open Type come qualsiasi altro tranne che sembra funky.

Ovviamente per farlo funzionare, questo tipo di carattere deve essere sul computer dell'utente. Ma preferiremmo non forzare l'utente a "installare il nostro font speciale nella cartella dei font". Preferiremmo caricare un oggetto Font direttamente dal TTF o installare il font in modo programmatico in modo che sia disponibile.

In che modo le applicazioni gestiscono questo tipo di cose? Ad esempio, noto che Adobe XYZ installa vari tipi di carattere sul sistema senza l'intervento dell'utente. Questo è quello che vorremmo fare.

EDIT: ok, idealmente, preferiremmo non installare direttamente il tipo di carattere. Non vogliamo che il nostro font LED a tema nifty venga visualizzato nell'elenco a discesa dei font dell'utente in MS Word. Preferiremmo usare questo tipo di carattere, ma limitarne l'uso o l'aspetto alla nostra app. Un modo per farlo?

MODIFICA 2: Questo è per un'applicazione WinForms .NET 2.0.

Grazie!

risposta

14

Io uso un carattere personalizzato per i miei personalizzati grafica biblioteca su un asp.net sito, ma questo dovrebbe funzionare anche su winform senza problemi. Basta specificare il file di font, la dimensione del font e lo stile del font, e viene restituito il tipo di carattere.

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 è una semplice struct

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

Ciò è necessario per evitare che il FontFamily da GC'ed e il tipo di carattere non funziona (asp.net, non so se è necessario il WinForm).

+0

Grazie , non sapevo nemmeno che * fosse * una classe PrivateFontFamily.Questo dovrebbe farlo. –

+0

Bello, per favore commenta se funziona davvero :) – Duckie

+0

Funziona. Almeno con il font di prova che ho appena provato. Sembra che questo sia lo scopo esatto di quelle lezioni. :) –

3

Per un'app WPF è possibile aggiungerla come risorsa.

Vedi here

Si potrebbe solo essere necessario impostare l'azione build per risorse e quindi fare riferimento come segue:

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

+0

Grazie. Upvoted. Vorrei tanto che potessi * usare * WPF. Purtroppo questa app è dritta Winforms. –

+0

Ottimo consiglio !! Ma non funziona per me :(Ho avuto e ora sto cercando di fare riferimento aggiungendo seguisym.ttf e poi scrivendo

Problemi correlati