2010-06-09 26 views
12

¿Existe una manera oficial de distribuir (implementar) una fuente específica con una aplicación .NET?Incrustar/desplegar fuente personalizada en la aplicación .NET

Tenemos una "fuente de LED" (de dominio público) que imprime números con el aspecto retro LED de la esfera del instrumento. Esta es una fuente True Type o Open Type estándar como cualquier otra, excepto que se ve funky.

Obviamente, para que funcione, esta fuente debe estar en la máquina del usuario. Pero preferimos no forzar al usuario a "instalar nuestra fuente especial en la carpeta de fuentes". Preferiríamos cargar un objeto Font directamente desde el TTF o instalar programáticamente la fuente para que esté disponible.

¿Cómo manejan las aplicaciones este tipo de cosas? Por ejemplo, noté que Adobe XYZ instala varias fuentes en el sistema sin la intervención del usuario. Eso es lo que nos gustaría hacer.

EDIT: Bueno, lo ideal , que prefiere no a instalar la fuente directamente. No queremos que nuestra ingeniosa fuente de LED con temas aparezca en el menú desplegable de fuentes del usuario en MS Word. Preferiríamos usar esta fuente, pero restringir su uso o apariencia a nuestra aplicación. Alguna forma de hacer esto?

EDIT 2: Esto es para una aplicación WinForms .NET 2.0.

Gracias!

Respuesta

14

Puedo utilizar una fuente personalizada para mis gráficos personalizados-biblioteca en una sitio asp.net, pero este debería también trabajar en winform sin problemas. Simplemente especifique el archivo de fuente, el tamaño de fuente y el estilo de fuente, y se devuelve el tipo de fuente.

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 es una estructura sencilla

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

Esto es necesario para evitar que el FontFamily ser GC'ed y el tipo de letra que no trabaja (asp.net, no sé si es necesario en winform).

+0

Gracias , ni siquiera sabía que * había * una clase PrivateFontFamily. Eso debería hacerlo. –

+0

Bien, por favor coméntelo si realmente funciona :) – Duckie

+0

Funciona. Al menos con la fuente de prueba que acabo de probar. Parece que este es el propósito exacto de esas clases. :) –

3

Para una aplicación WPF puede agregarlo como recurso.

Ver here

Usted sólo tiene que establecer la acción de acumulación de recursos y luego hacer referencia a ella de la siguiente manera:

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

+0

Gracias. Upvoted. Ojalá pudiera * usar * WPF. Desafortunadamente esta aplicación es Winforms recta. –

+0

¡Un gran consejo! Pero no funciona para mí :(tenía y ahora estoy tratando de referencia agregando seguisym.ttf y escribiendo

Cuestiones relacionadas