2010-06-09 9 views
12

Existe-t-il un moyen officiel de distribuer (déployer) une police spécifique avec une application .NET?Intégration/déploiement de polices personnalisées dans l'application .NET

Nous avons une "police à DEL" (domaine public) qui imprime des numéros avec l'apparence de la rétro instrumentation à DEL. C'est une police True Type ou Open Type standard comme les autres, sauf qu'elle a l'air géniale. De toute évidence, pour que cela fonctionne, cette police doit être sur la machine de l'utilisateur. Mais nous préférons ne pas forcer l'utilisateur à "installer notre police spéciale dans votre dossier de polices". Nous préférons soit charger un objet Font directement à partir du TTF, soit installer par programme la police afin qu'elle soit disponible.

Comment les applications traitent-elles ce genre de choses? Par exemple, je remarque Adobe XYZ installe diverses polices sur le système sans intervention de l'utilisateur. C'est ce que nous aimerions faire.

EDIT: D'accord, idéalement, nous préférerions pas installer directement la police. Nous ne voulons pas que notre fonte LED à thème astucieux apparaisse dans la liste des polices de l'utilisateur dans MS Word. Nous préférons utiliser cette police, mais restreindre son utilisation ou son apparence à notre application. Tout moyen de le faire?

EDIT 2: Ceci est pour une application WinForms .NET 2.0.

Merci!

Répondre

14

J'utilise une police personnalisée pour mes graphiques bibliothèque personnalisés sur une site asp.net, mais ce devrait également travailler également sur winform sans problèmes. Vous spécifiez juste le fichier de police, la taille de police et le style de police, et le type de police est retourné.

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 est un simple struct

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

Cela est nécessaire pour éviter FontFamily être GC'ed et la police ne fonctionne pas (asp.net, je ne sais pas si cela est nécessaire sur winform).

+0

Merci , je ne savais même pas qu'il y avait une classe PrivateFontFamily * Cela devrait le faire –

+0

Nice, s'il vous plaît commenter si cela fonctionne réellement :) – Duckie

+0

Cela fonctionne. Au moins avec la police de test que j'ai juste essayé. Semble que c'est le but exact de ces classes. :) –

3

Pour une application WPF, vous pouvez l'ajouter en tant que ressource.

Voir here

Vous juste devez définir l'action de construction de ressources et de référence comme suit:

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

+0

Merci. Upvoted. Je souhaite que je pourrais * utiliser * WPF. Malheureusement, cette application est directement Winforms. –

+0

Bon conseil !! Mais cela ne fonctionne pas pour moi :(J'ai et maintenant j'essaie de référence en ajoutant seguisym.ttf et en écrivant

Questions connexes