C#实现根据字体名称获取字体文件名

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

C#实现根据字体名称获取字体文件名_第1张图片
  除了查询注册表,参考文献2,还介绍了一种方式,即枚举Windows\Fonts中的字体文件,通过PrivateFontCollection类获取字体文件对应的字体名。
C#实现根据字体名称获取字体文件名_第2张图片
  本文整合参考文献1-2中的给出根据字体名称获取字体文件名的示例代码,主要逻辑为:

  1. 调用InstalledFontCollection类获取本机已安装字体名;
  2. 选择某一字体,首先检查注册表中是否有该字体对应的文件名,如有则返回,没有则跳转到第3步;
  3. 查找Windows\Fonts中后缀名为ttf或ttc的字体文件名,检查是否有字体文件对应的文件名。

  程序执行效果如下所示。程序源码已提交至GitHub,地址为:https://github.com/guochao2299/GetFontFileName
C#实现根据字体名称获取字体文件名_第3张图片

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

你可能感兴趣的:(dotnet编程,C#,字体名称,字体文件名)