¿Existe alguna manera fácil (en .Net) de probar si hay una fuente instalada en la máquina actual?Pruebe si hay una fuente instalada
Respuesta
string fontName = "Consolas";
float fontSize = 12;
using (Font fontTester = new Font(
fontName,
fontSize,
FontStyle.Regular,
GraphicsUnit.Pixel))
{
if (fontTester.Name == fontName)
{
// Font exists
}
else
{
// Font doesn't exist
}
}
How do you get a list of all the installed fonts?
var fontsCollection = new InstalledFontCollection();
foreach (var fontFamiliy in fontsCollection.Families)
{
if (fontFamiliy.Name == fontName) ... \\ installed
}
Ver InstalledFontCollection class para más detalles.
Esta es la forma más "directa" para mí, otras respuestas propuestas parecen más como soluciones temporales. –
@UgurTuran: Sí, ¿pero me pregunto sobre el rendimiento? No lo sabría hasta que lo intentara, pero el instinto dice que los otros son más rápidos debido a la oportunidad de tener búsquedas en la tabla. – Hans
Gracias a Jeff, tengo mejor que lea la documentación de la clase de letra:
Si el parámetro familyName especifica una fuente que no está instalada en el equipo que ejecuta la aplicación o no es compatible, se sustituirá Microsoft Sans Serif.
El resultado de este conocimiento:
private bool IsFontInstalled(string fontName) {
using (var testFont = new Font(fontName, 8)) {
return 0 == string.Compare(
fontName,
testFont.Name,
StringComparison.InvariantCultureIgnoreCase);
}
}
Evidentemente este constructor de Fuente asume FontStyle.Regular ... solo funciona si el estilo de fuente Regular está disponible – jltrem
ir fuera de la respuesta de GVS:
private static bool IsFontInstalled(string fontName)
{
using (var testFont = new Font(fontName, 8))
return fontName.Equals(testFont.Name, StringComparison.InvariantCultureIgnoreCase);
}
Otras respuestas propusieron utilizar Font
creación sólo funcionan si el FontStyle.Regular
está disponible. Algunas fuentes, por ejemplo, Verlag Bold, no tienen un estilo regular. La creación fallaría con la excepción La fuente 'Verlag Bold' no es compatible con el estilo 'Regular'. Deberá verificar los estilos que su aplicación requerirá. Una solución de la siguiente manera:
public static bool IsFontInstalled(string fontName)
{
bool installed = IsFontInstalled(fontName, FontStyle.Regular);
if (!installed) { installed = IsFontInstalled(fontName, FontStyle.Bold); }
if (!installed) { installed = IsFontInstalled(fontName, FontStyle.Italic); }
return installed;
}
public static bool IsFontInstalled(string fontName, FontStyle style)
{
bool installed = false;
const float emSize = 8.0f;
try
{
using (var testFont = new Font(fontName, emSize, style))
{
installed = (0 == string.Compare(fontName, testFont.Name, StringComparison.InvariantCultureIgnoreCase));
}
}
catch
{
}
return installed;
}
Así es como yo lo haría:
private static bool IsFontInstalled(string name)
{
using (InstalledFontCollection fontsCollection = new InstalledFontCollection())
{
return fontsCollection.Families
.Any(x => x.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase));
}
}
Una cosa a destacar con esto es que la propiedad Name
no siempre es lo que se espera de buscar en C: \ WINDOWS \ Fuentes. Por ejemplo, tengo una fuente instalada llamada "Arabic Typsetting Regular". IsFontInstalled("Arabic Typesetting Regular")
devolverá falso, pero IsFontInstalled("Arabic Typesetting")
devolverá verdadero. ("Tipografía árabe" es el nombre de la fuente en la herramienta de vista previa de fuentes de Windows.)
En lo que respecta a los recursos, realicé una prueba donde llamé a este método varias veces, y la prueba terminó en solo unos pocos milisegundos cada vez. Mi máquina está un poco sobrecargada, pero a menos que necesites ejecutar esta consulta con mucha frecuencia, parece que el rendimiento es muy bueno (e incluso si lo hiciste, para eso sirve el almacenamiento en caché).
- 1. Detectando programáticamente si hay una aplicación instalada en el iPhone
- 2. ¿Cómo verificar programáticamente si hay una aplicación instalada?
- 3. Pruebe si una clase es polimórfica
- 4. Pruebe si la intención está disponible
- 5. ¿Qué sucede si uso una fuente que no está instalada en la máquina del cliente?
- 6. Pruebe si Convert.ChangeType funcionará entre dos tipos
- 7. Pruebe si existe un índice de una lista
- 8. Pruebe si existe valor de registro
- 9. Pruebe si un alias es una plantilla en D 2.0
- 10. Pruebe si una expresión regular es válida en PHP
- 11. Determinado mediante programación si está instalada una biblioteca COM (.DLL)
- 12. Detectando si está instalada una base de datos Oracle
- 13. ¿Cómo puedo verificar mediante programación si hay una característica del servidor instalada en Windows Server 2008?
- 14. Detectar desde el navegador si hay una aplicación específica instalada en Android
- 15. Detectar desde el navegador si está instalada una aplicación específica
- 16. WIX: ¿Cómo detectar si está instalada una aplicación de terceros?
- 17. Pruebe si el puerto está abierto y reenviado usando PHP
- 18. Pruebe con Java si hay dos direcciones IP en la misma red
- 19. ¿Podría recomendar algún proyecto de fuente abierta donde la fuente se pruebe exhaustivamente con pruebas unitarias?
- 20. Pruebe Dequeue en ConcurrentQueue
- 21. Pruebe la función "System.Web.Mvc.ViewEngines.Engines.FindPartialView"
- 22. Pruebe si el valor es un número entero en Sass
- 23. Pruebe si el puerto remoto está en uso
- 24. Pruebe si la tecla Ctrl está presionada con C#
- 25. Pruebe si un objeto está definido en ActionScript
- 26. Pruebe si se llama a una función en una prueba de la unidad Ruby on Rails
- 27. ¿Detecta una aplicación instalada o no?
- 28. ¿Cómo se ejecuta una acción personalizada en WiX solo si se desinstala una característica instalada?
- 29. Pruebe si un objeto implementa una interfaz genérica para cualquier tipo genérico
- 30. Pruebe si el valor de una macro de C está vacío
esto solo funciona si el estilo de fuente Regular está disponible – jltrem