繁体   English   中英

如何获取文本字体文件的标题(而非名称)? (TTF和OTF)

[英]How to get the title (not the name) of a text font file? (TTF and OTF)

在C#或VB.NET中,在WinForms类库或WPF下,并且不需要第三方应用程序或API,我想知道如何检索文本字体文件的标题,方法与正确执行时所显示的相同单击文本字体文件,然后转到详细信息属性页面。

换句话说,我需要取得作为该字体将在Windows注册表中注册的确切名称,这是不一样的名字给我的System.Drawing.FontFamily.Name财产既不是System.Drawing.Font.Name属性。

研究

关于如何获取字体名称,StackOverflow中存在一些问题,例如thisthis ,但字体标题没有问题。

那无济于事。 我将举例说明不同之处:

我有一个真正的字体文件,文件名为“ OpenSans-Light.ttf”,在详细信息属性页面中显示为“ Open Sans Light”,但是使用基于System.Drawing.FontFamily的解决方案,我得到的名称为“ Open Sans ”。

然后,在我看到.NET Framework(WindowsForms)类库可能未提供获取字体标题的功能之后,我试图从Windows API中发现哪个功能可能正在使用文件details属性的Windows Shell扩展。表格以获取字体标题...

...我什么也没找到,没有信息,什么都没有,只有GetFontData函数没有为我提供所需的信息。

我注意到“资源管理器”列表视图中的“标题”列显示了所需的确切字体名称字符串,因此知道这一点,然后我意识到可以通过使用WindowsAPICodePack库的win32 shell属性包装器轻松解决该问题。检索字体文件的Title属性。

我知道我请求的解决方案没有第三方库,但是我几乎可以肯定,这将不是使用该解决方案的理想解决方案,因为...嗯,一致的替代方案似乎是自己实现Win32 Shell属性包装器。

示例代码:

Imports Microsoft.WindowsAPICodePack.Shell

Dim diInfo As New DirectoryInfo("C:\Fonts\")

For Each fiInfo As FileInfo In diInfo.GetFiles("*.ttf", SearchOption.TopDirectoryOnly)
    Dim sFile As ShellFile = ShellFile.FromFilePath(fiInfo.FullName)
    Dim title As String = sFile.Properties.System.Title.Value

    Dim sb As New StringBuilder()
    sb.AppendLine(String.Format("Name.: {0}", fiInfo.Name))
    sb.AppendLine(String.Format("Title: {0}", title))

    Console.WriteLine(sb.ToString())
Next

输出示例:

Name.: OpenSans LightItalic.ttf
Title: Open Sans Light Italic

Name.: OpenSans Light_0.ttf
Title: Open Sans Light

Name.: OpenSans-Bold.ttf
Title: Open Sans Bold

Name.: OpenSans-BoldItalic.ttf
Title: Open Sans Bold Italic

Name.: OpenSans-ExtraBold.ttf
Title: Open Sans Extrabold

Name.: OpenSans-ExtraBoldItalic.ttf
Title: Open Sans Extrabold Italic

Name.: OpenSans-Italic.ttf
Title: Open Sans Italic

Name.: OpenSans-Light.ttf
Title: Open Sans Light

Name.: OpenSans-LightItalic.ttf
Title: Open Sans Light Italic

Name.: OpenSans-Regular.ttf
Title: Open Sans

Name.: OpenSans-Semibold.ttf
Title: Open Sans Semibold

Name.: OpenSans-SemiboldItalic.ttf
Title: Open Sans Semibold Italic

如果我们确实确实需要与显示在Windows注册表中的字符串完全相同的字符串(在HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts ,则唯一缺少的事情是在字符串的末尾添加“(TrueType)”或“(OpenType)” HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts键)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM