在与.NET结合使用之前,如何确保字体存在
时间:2020-03-06 14:28:27 来源:igfitidea点击:
我有一个VB.NET Windows窗体项目,该项目在运行时将文本直接绘制到窗体上。但是,在使用字体绘画之前,我想确保用户计算机上存在该字体和字体大小。如果没有,我会尝试其他一些类似的字体,最终使用Arial或者其他字体作为默认字体。
在用户计算机上测试和验证字体的最佳方法是什么?
解决方案
在标题为"如何:枚举已安装的字体"的MSDN文章中,我找到了以下代码:
InstalledFontCollection installedFontCollection = new InstalledFontCollection(); // Get the array of FontFamily objects. FontFamily[] fontFamilies = installedFontCollection.Families;
这是c#中的一种解决方案:
public partial class Form1 : Form { public Form1() { SetFontFinal(); InitializeComponent(); } /// <summary> /// This method attempts to set the font in the form to Cambria, which /// will only work in some scenarios. If Cambria is not available, it will /// fall back to Times New Roman, so the font is good on almost all systems. /// </summary> private void SetFontFinal() { string fontName = "Cambria"; Font testFont = new Font(fontName, 16.0f, FontStyle.Regular, GraphicsUnit.Pixel); if (testFont.Name == fontName) { // The font exists, so use it. this.Font = testFont; } else { // The font we tested doesn't exist, so fallback to Times. this.Font = new Font("Times New Roman", 16.0f, FontStyle.Regular, GraphicsUnit.Pixel); } } }
这是VB中的一种方法:
Public Function FontExists(FontName As String) As Boolean Dim oFont As New StdFont Dim bAns As Boolean oFont.Name = FontName bAns = StrComp(FontName, oFont.Name, vbTextCompare) = 0 FontExists = bAns End Function
另请参见导致此代码的同一问题:
private bool IsFontInstalled(string fontName) { using (var testFont = new Font(fontName, 8)) { return 0 == string.Compare( fontName, testFont.Name, StringComparison.InvariantCultureIgnoreCase); } }
Arial Bold Italic不太可能是一种字体。它是Arial家族的子类。
尝试使其简单并测试" Arial"。