《简单测试.NET开源的PDF文档生成器QuestPDF》中提到,绘制文字时指定字体用的不是字体名称,而是字体文件名。之前学习C# GDI+、HTML5中的Canvas、Tkinter中的Canvas,绘制文本都用的字体名称,C#本身的类中并没有提供根据字体名称获取字体文件名的函数,需要自己写程序去找。
根据参考文献2,获取字体文件名的方式有多种,首先可以在注册表中找到部分字体名称及对应的字体文件名,其路径为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\Fonts,可以调用注册表读取函数获取。但是注册表中的信息不全,有一部分字体没有在里面,例如宋体、黑体等(至少我电脑上没有)。

除了查询注册表,参考文献2,还介绍了一种方式,即枚举Windows\Fonts中的字体文件,通过PrivateFontCollection类获取字体文件对应的字体名。

本文整合参考文献1-2中的给出根据字体名称获取字体文件名的示例代码,主要逻辑为:
程序执行效果如下所示。程序源码已提交至GitHub,地址为:https://github.com/guochao2299/GetFontFileName

参考文献:
[1]https://blog.csdn.net/giswhw66/article/details/52094986
[2]http://wjhsh.net/wxylog-p-6871815.html