Existe-t-il un moyen facile (en .Net) de tester si une police est installée sur la machine actuelle?Test si une police est installée
Répondre
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
}
Voir InstalledFontCollection class pour plus de détails.
C'est le moyen le plus "direct" pour moi, d'autres réponses proposées ressemblent plus à des solutions de contournement. –
@Uurururan: Oui, mais je me pose des questions sur les performances? Je ne sais pas jusqu'à ce que vous avez essayé, mais gut dit que les autres sont plus rapides en raison de l'occasion pour les recherches de table. – Hans
Merci à Jeff, je ferais mieux de lire la documentation de la classe de la police:
Si le paramètre familyName spécifie une police qui n'est pas installé sur la machine exécutant l'application ou n'est pas supporté, Microsoft Sans Serif sera substitué.
Le résultat de cette connaissance:
private bool IsFontInstalled(string fontName) {
using (var testFont = new Font(fontName, 8)) {
return 0 == string.Compare(
fontName,
testFont.Name,
StringComparison.InvariantCultureIgnoreCase);
}
}
Évidemment, ce constructeur de polices suppose FontStyle.Regular ... cela ne fonctionne que si le style de police Regular est disponible – jltrem
Allant au large de la réponse GVS:
private static bool IsFontInstalled(string fontName)
{
using (var testFont = new Font(fontName, 8))
return fontName.Equals(testFont.Name, StringComparison.InvariantCultureIgnoreCase);
}
Autres réponses proposées en utilisant la création Font
ne fonctionnera que si le FontStyle.Regular
est disponible. Certaines polices, par exemple Verlag Bold, n'ont pas de style standard. La création échouerait avec l'exception La police 'Verlag Bold' ne prend pas en charge le style 'Regular'. Vous devrez vérifier les styles que votre application exigera. Une solution suivante:
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;
}
Voici comment je le ferais:
private static bool IsFontInstalled(string name)
{
using (InstalledFontCollection fontsCollection = new InstalledFontCollection())
{
return fontsCollection.Families
.Any(x => x.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase));
}
}
Une chose à noter avec ceci est que la propriété Name
n'est pas toujours ce que vous attendez de regarder dans C: \ WINDOWS \ Fonts. Par exemple, j'ai une police installée appelée "Arabic Typsetting Regular". IsFontInstalled("Arabic Typesetting Regular")
retournera faux, mais IsFontInstalled("Arabic Typesetting")
retournera vrai. ("Arabic Typeetting" est le nom de la police dans l'outil d'aperçu des polices de Windows.)
En ce qui concerne les ressources, j'ai effectué un test où j'ai appelé cette méthode plusieurs fois, et le test s'est terminé en quelques millisecondes seulement. à chaque fois. Mon ordinateur est un peu trop puissant, mais à moins que vous ayez besoin d'exécuter cette requête très fréquemment, il semble que la performance soit très bonne (et même si vous l'avez fait, c'est pour cela que la mise en cache est utilisée).
- 1. Test si une police est installée (Win32)
- 2. Requête Windows pour si une application est installée par UpgradeCode
- 3. WIX: Comment détecter si une application tierce est installée?
- 4. Test si la valeur est une fonction
- 5. Tester si une police est monospaced en Java
- 6. Comment déterminer si une police TrueType est en italique?
- 7. Comment vérifier si l'interopérabilité .net pour Excel est installée
- 8. Test pour voir si une fenêtre est agrandie
- 9. Test si quelque chose est une classe en javascript
- 10. test si une propriété est déclarée dans la classe
- 11. Comment puis-je vérifier par programme si une application CYGWIN est installée dans un script SH?
- 12. Une application déployée clickonce est installée uniquement pour l'utilisateur spécifique?
- 13. Test si un objet implémente une interface
- 14. Comment savoir sur quel lecteur une application Java est installée?
- 15. Découvrez si la mise à jour de la famille .NET est installée
- 16. Test pour voir si un socket est ouvert dans Linux
- 17. Comment savoir si la version de débogage de Flash est installée?
- 18. Ruby on Rails: bijou pas trouvé, même si elle est installée
- 19. Comment supprimer une DLL auto-installée?
- 20. Comment puis-je vérifier par programme si une fonctionnalité de serveur est installée dans Windows Server 2008?
- 21. Helvetica est-elle une police de base de navigateur?
- 22. WIX Propriété installée
- 23. test xslt si une valeur variable est contenue dans un ensemble de noeuds
- 24. si une variable est définie
- 25. test pour voir si un XElement existe
- 26. PHP Comment savoir si une variable est une référence?
- 27. Comment déterminer quelle version de Direct3D est installée?
- 28. Comment savoir quelle version de GTK + est installée sur Ubuntu?
- 29. Comment savoir quelle version de MDAC est installée?
- 30. Test Cairo si le texte chevauche
cela ne fonctionne que si le style de police Regular est disponible – jltrem