为何Windows Forms可正常使用OTF字体?与普遍认知相悖的疑问
以下是导致你遇到的「测试正常但他人出现崩溃」差异的核心原因:
.NET Framework版本的兼容性修复
早期.NET Framework版本(如4.0及以前)的WinForms对OTF字体的支持存在明显缺陷,尤其是复杂OTF字体容易触发渲染错误或崩溃。而.NET Framework 4.8通过更新GDI+字体渲染逻辑,完善了对OTF字体的支持,这是你测试无问题的关键原因。OTF字体的内核类型差异
OTF字体分为两类:基于TrueType内核的OTF和基于PostScript内核的OTF。旧版WinForms对PostScript内核的OTF支持极差,几乎必然出现兼容性问题;而基于TrueType内核的OTF在旧框架中能部分正常工作。你测试的可能以TrueType内核OTF为主,而他人遇到崩溃的大概率是PostScript内核的OTF。系统环境与字体安装方式的影响
Windows系统版本对字体的底层支持有差异:Windows 7及更早版本的系统级OTF支持不如Windows 10/11,即使使用相同.NET版本,在旧系统上运行也可能触发异常。另外,字体仅当前用户安装而非全局安装时,部分场景下WinForms可能无法正确加载字体,引发崩溃。代码实现细节的区别
你使用FontDialog选择字体并直接赋值给控件的流程,在.NET 4.8中已经做了兼容性校验。但如果他人的代码是手动构造Font对象(直接传入字体名称而未校验字体可用性),或者使用了未更新字体处理逻辑的第三方WinForms控件,即使框架支持OTF,也会触发「仅支持TTF」的崩溃异常。
内容的提问来源于stack exchange,提问作者GeoMH

