¿Cómo uso un archivo de fuentes .tff personalizado que tengo con mi aplicación actual windows.forms? Leí un poco donde lo uso como un recurso incrustado, pero ¿cómo lo configuro como el tipo System.Drawing.Font?Fuentes personalizadas .ttf para usar en ventanas C#. Formulario
Respuesta
Este artículo: How to embed a true type font muestra cómo hacer lo que pregunta en .NET.
Cómo incrustar una fuente True Type
Algunas aplicaciones, por razones de estética o una requerido estilo visual , se incrustar algunas fuentes comunes de manera que siempre están ahí cuando sea necesario, independientemente de si la fuente está realmente instalada en el sistema de destino.
El secreto de esto es doble. Primero, la fuente debe colocarse en los recursos agregándola a la solución y marcándola como un recurso incrustado . En segundo lugar, en el tiempo de ejecución, la fuente se carga a través de una secuencia y se almacena en un objeto PrivateFontCollection para su uso posterior.
Este ejemplo utiliza una fuente que es poco probable que esté instalada en su sistema . Alpha Dance es una fuente True Type gratuita que está disponible en , la colección de fuentes gratuitas. Esta fuente se incrustó en la aplicación agregándola a la solución y seleccionando la acción de compilación "recurso incrustado" en las propiedades.
vez que el archivo se ha incluido con éxito en los recursos que necesita para proporcionar un objeto PrivateFontCollection en la que almacenarlo y un método por el cual se carga en la colección. El mejor lugar para hacer es probablemente la excepción de carga de formulario o controlador de eventos. La siguiente lista de muestra el proceso. Observe cómo se usa el método AddMemoryFont . Requiere un puntero a la memoria en la que la fuente es guardada como una matriz de bytes. En C# podemos usar la palabra clave insegura para la conveniencia , pero VB debe usar las capacidades de las clases Marshal manejo de memoria no administrada. La última opción está, por supuesto, abierta a los programadores de C# a los que simplemente no les gusta la palabra clave insegura. PrivateFontCollection pfc = new PrivateFontCollection();
private void Form1_Load(object sender, System.EventArgs e)
{
Stream fontStream = this.GetType().Assembly.GetManifestResourceStream("embedfont.Alphd___.ttf");
byte[] fontdata = new byte[fontStream.Length];
fontStream.Read(fontdata,0,(int)fontStream.Length);
fontStream.Close();
unsafe
{
fixed(byte * pFontData = fontdata)
{
pfc.AddMemoryFont((System.IntPtr)pFontData,fontdata.Length);
}
}
}
Fuentes pueden tener sólo ciertos estilos que están disponibles y por desgracia, la selección de un estilo de fuente que no existe va a lanzar una excepción .Para solucionar esto, la fuente se puede interrogar para ver qué estilos de están disponibles y solo se pueden usar los que proporciona la fuente. El siguiente listado demuestra cómo la fuente Alpha Dance es utilizada por comprobando los estilos de fuente disponibles y mostrando todos los que existen. Tenga en cuenta que los estilos de subrayado y tachado son pseudo styles construidos por el motor de representación de fuente y no se proporcionan en realidad en forma de glifo.
private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
bool bold=false;
bool regular=false;
bool italic=false;
e.Graphics.PageUnit=GraphicsUnit.Point;
SolidBrush b = new SolidBrush(Color.Black);
float y=5;
System.Drawing.Font fn;
foreach(FontFamily ff in pfc.Families)
{
if(ff.IsStyleAvailable(FontStyle.Regular))
{
regular=true;
fn=new Font(ff,18,FontStyle.Regular);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(ff.IsStyleAvailable(FontStyle.Bold))
{
bold=true;
fn=new Font(ff,18,FontStyle.Bold);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(ff.IsStyleAvailable(FontStyle.Italic))
{
italic=true;
fn=new Font(ff,18,FontStyle.Italic);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
if(bold && italic)
{
fn=new Font(ff,18,FontStyle.Bold | FontStyle.Italic);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
}
fn=new Font(ff,18,FontStyle.Underline);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
y+=20;
fn=new Font(ff,18,FontStyle.Strikeout);
e.Graphics.DrawString(fn.Name,fn,b,5,y,StringFormat.GenericTypographic);
fn.Dispose();
}
b.Dispose();
}
Figura 2 muestra la aplicación en acción.
Ver el controlador de eventos Form1_Paint, se muestra específicamente cómo configurar el tipo System.Drawing.Font. Se basa en el uso de la clase System.Drawing.Text.PrivateFontCollection.
Espero que esto ayude.
Por favor, edite su respuesta. El enlace está muerto. – Odys
Utilice la función de API AddFontResourceEx a través de p/invoke, pasando FR_PRIVATE para evitar la instalación de una fuente global. Entonces debería poder pasar el nombre de la fuente al constructor de la Font como de costumbre.
Editar: Si usa PrivateFontCollection y carga la fuente desde un archivo externo, ni siquiera necesita esto. Si carga la fuente desde un recurso incrustado, use la solución de Ash.
¿Hay algún ejemplo en algún lugar? Realmente puedo entender el enlace de MSDN. Gracias por tu ayuda. – kthakore
Puede encontrarle útil un artículo de MSDN How to: Create a Private Font Collection.
- 1. C# lib para procesar archivos de fuentes - TTF (TrueType), otros
- 2. Fuentes personalizadas en Android
- 3. Uso de fuentes personalizadas en Cocos2d
- 4. Uso de fuentes TTF personalizadas para la representación de imágenes DrawString
- 5. Desarrollo de iPhone: ¿cómo usar fuentes personalizadas?
- 6. Fuentes personalizadas en Java
- 7. ¿Puedo precargar fuentes personalizadas en iPhone para mejorar el rendimiento?
- 8. Fuentes TTF no disponibles en Intellij
- 9. CSS - Fuentes personalizadas?
- 10. Fuentes personalizadas y Textview personalizada en Android
- 11. Cómo administrar las fuentes personalizadas en la aplicación web (system.drawing)
- 12. ¿Cómo usar fuentes externas?
- 13. TTF instalado localmente anula las fuentes de Google
- 14. Android: agregue fuentes personalizadas al sistema
- 15. fuentes personalizadas con diferentes métricas verticales entre OS
- 16. Convierte fuentes arábigas TTF/OTF a woff, eof?
- 17. Estado del arte/mejores prácticas para usar fuentes personalizadas en páginas web?
- 18. ¿Cómo reducir el tamaño de las fuentes .ttf?
- 19. Cómo establecer fuentes personalizadas en estilos en negrita
- 20. fnmatch para ventanas en C?
- 21. ¿Utiliza varias fuentes personalizadas con @ font-face?
- 22. Localización de fuentes en Linux (en C++)
- 23. ¿Es posible utilizar fuentes personalizadas, utilizando font-face?
- 24. Excepciones personalizadas en C++
- 25. SetWindowPos en C# para mover ventanas
- 26. Fuentes personalizadas, puntos suspensivos en MultiLine TextViews, Glifos y fallas
- 27. C# - Usar formulario en lugar de messagebox
- 28. Las fuentes personalizadas no se muestran correctamente en iOS
- 29. Pase opciones personalizadas a un formulario symfony2
- 30. ¿Cómo puedo usar fuentes personalizadas en un elemento Canvas de HTML5?
Muchas gracias por su ayuda Thomas y Ash – kthakore