有没有一种简单的方法(在.net中)来测试是否安装了当前机器上的字体?
Answer 1:
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
}
}
Answer 2:
你如何获得所有已安装的字体列表?
var fontsCollection = new InstalledFontCollection();
foreach (var fontFamiliy in fontsCollection.Families)
{
if (fontFamiliy.Name == fontName) ... \\ installed
}
见InstalledFontCollection类的细节。
MSDN:
枚举安装的字体
Answer 3:
感谢杰夫,我有更好的阅读字体类的文档:
如果familyName参数指定了未安装在机器上运行的应用程序或不支持的字体,微软无衬线将被取代。
这方面的知识的结果:
private bool IsFontInstalled(string fontName) {
using (var testFont = new Font(fontName, 8)) {
return 0 == string.Compare(
fontName,
testFont.Name,
StringComparison.InvariantCultureIgnoreCase);
}
}
Answer 4:
其他答案使用建议Font
创作如果只工作FontStyle.Regular
可用。 有些字体,例如出版社大胆,没有正规的风格。 创作会失败,出现异常字体“出版社大胆”不支持风格“常规”。 你将需要检查的风格,你的应用需要。 溶液如下:
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;
}
Answer 5:
去关GVS”的回答:
private static bool IsFontInstalled(string fontName)
{
using (var testFont = new Font(fontName, 8))
return fontName.Equals(testFont.Name, StringComparison.InvariantCultureIgnoreCase);
}
Answer 6:
这是我会怎么做:
private static bool IsFontInstalled(string name)
{
using (InstalledFontCollection fontsCollection = new InstalledFontCollection())
{
return fontsCollection.Families
.Any(x => x.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase));
}
}
有一件事与此要注意的是, Name
属性并不总是你从看用C期望:\ WINDOWS \字体。 例如,我有安装的字体被称为“阿拉伯Typsetting常规”。 IsFontInstalled("Arabic Typesetting Regular")
将返回false,但IsFontInstalled("Arabic Typesetting")
将返回true。 (“阿拉伯语排版”是在Windows的字体预览工具的字体的名称。)
至于资源走,我跑了一个测试,我调用此方法多次,并测试每次都只有几毫秒完成。 我的机器有点过强,但除非你需要非常频繁地运行此查询,似乎表现非常好(即使你做到了,这就是高速缓存是)。
文章来源: Test if a Font is installed