问题描述
我在我的 .Net 4.5 软件中使用了一些嵌入字体。当我在 Windows 10 上运行软件时一切正常,但是当我尝试在 Windows 7 虚拟机上测试该软件时,它抛出了这个异常:
字体 'B Koodak' 不支持样式 'Regular'。
以下是我从资源加载嵌入字体的方法:
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont,uint cbFont,IntPtr pdv,[System.Runtime.InteropServices.In] ref uint pcFonts);
public readonly PrivateFontCollection privateFontCollection = new PrivateFontCollection();
public readonly FontFamily Samim;
private readonly FontFamily IranNastaliq;
private readonly FontFamily BKoodak;
private readonly FontFamily BNazanin;
public MainForm()
{
uint temp = 0;
byte[][] fontData = new byte[][] { Properties.Resources.Samim,Properties.Resources.IranNastaliq_Web,Properties.Resources.BNazanin,Properties.Resources.BKoodak };
for (int i = 0; i < fontData.Length; i++)
{
IntPtr fontPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(fontData[i].Length);
System.Runtime.InteropServices.Marshal.copy(fontData[i],fontPtr,fontData[i].Length);
privateFontCollection.AddMemoryFont(fontPtr,fontData[i].Length);
AddFontMemResourceEx(fontPtr,(uint)fontData[i].Length,IntPtr.Zero,ref temp);
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr);
}
Samim = privateFontCollection.Families[3];
IranNastaliq = privateFontCollection.Families[2];
BNazanin = privateFontCollection.Families[1];
BKoodak = privateFontCollection.Families[0];
InitializeComponent();
Application.CurrentCulture = new CultureInfo("fa-IR");
// Other codes...
}
private void Draw(ref graphics)
{
Font font = new Font(BKoodak,18);
graphics.DrawString("سلام",font,new SolidBrush(Color.Black),new StringFormat());
}
为什么在 Windows 10 上可以,但在 Windows 7 上不行?我该如何解决?
编辑:
我发现这个字体只支持粗体和轮廓模式。在 Microsoft Word 中,此字体的粗体和常规样式没有区别。
所以我将 Font font = new Font(BKoodak,18);
改为 Font font = new Font(BKoodak,18,FontStyle.Bold);
,现在它可以在 Windows 7 上运行了。
现在的问题是:尽管此字体不支持常规样式,但为什么常规样式在 Windows 10 中可以正常工作?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)