C# · 12月 31, 2021

c# – Mono PrivateFontCollection.AddFontFile错误的解决方法

当我在Mono.net中调用PrivateFontCollection.AddFontFile方法时,它总是返回一个标准的font-family.这个错误已经在几个网站上报告过,但据我所知,没有办法解决它.这个bug本身并没有在Mono-libraries中修复.有没有解决办法?

编辑:作为对henchman答案的反应,我将发布代码:

PrivateFontCollection pfc = new PrivateFontCollection();pfc.AddFontFile(“myFontFamily.ttf”);myFontFamily = pfc.Families[0x00];Font myFont = new Font(myFontFamily,14.0f);

我知道这个代码可以在Microsoft.Net框架上正常运行,但是当在Mono上执行时,它只是给出一个标准的font-family(我认为是Arial),名称为myFontFamily.ttf

解决方法 从谷歌发现这个帖子如果它是任何安慰,我遇到与AddMemoryFont相同的问题(在Windows上工作正常,单声道给我一个通用的字体.)如果它是任何安慰,它看起来像是Mono的问题,而不是您的代码.

挖掘源码,System.Windows.Drawing.PrivateFontCollection大多只是围绕GDIPlus.GdipPrivateAddFontFile的包装器,它本身是围绕fontconfig的FcConfigAppFontAddFile的包装器.不出现任何错误的原因是GDIplus不会检查fontconfig中的返回值,所以看起来fontconfig无法以任何原因读取字体,但是GDIplus不了解它,所以也不是PrivateFontCollection.