2013-03-07 83 views
3

我有一組字體文件具有不可預知的文件名,所以我無法從文件名中推斷出真正的「字體系列」名稱。因此,我需要讀取字體元數據以提取真正的「字體家族」名稱,以渲染此字體文件。我在C#.NET 4.0 WinForms中。如何獲取給定字體文件的字體系列的名稱?

我見過函數GetFontInformation,但我似乎無法找到相同的P/Invoke標頭。我所有的是C++ version這是很難弄清楚。有任何想法嗎?

我之所以不能使用PrivateFontCollection類通過字體文件解析對我來說,這些都是OTF字體和.NET/GDI +只支持TTF字體

+0

如果你有一個'Font'對象,你可以訪問'FontFamily'屬性:http://msdn.microsoft.com/en-us/library/system .drawing.font.aspx請問這是行不通的? – Yuck 2013-03-07 18:51:00

+0

您也可以嘗試這種方式,使用基於文件的Uri加載字體文件:http://msdn.microsoft.com/en-us/library/ms602324.aspx – Yuck 2013-03-07 18:52:48

回答

5

您需要將字體添加到(PrivateFontCollection),然後請求FontFamily並獲取其Name屬性。

private static string GetFontNameFromFile(string filename) 
{ 
    PrivateFontCollection fontCollection = new PrivateFontCollection(); 
    fontCollection.AddFontFile("path_to_font"); 
    return fontCollection.Families[0].Name; 
} 

所需命名空間:

using System.Drawing; 
using System.Drawing.Text; 
+3

此方法適用於** TTF **字體,但不適用於** OTF **字體。 – 2013-03-07 18:58:19

+2

@Geotarget事實並非如此。它也適用於OTF字體。 – SepehrM 2014-08-06 09:07:44

+1

如果您嘗試它,它並不奏效。這是不可能的,因爲.NET不支持OTF,因爲GDI +僅支持TTF或其他。 http://www.codeproject.com/Tips/557423/Rendering-Text-with-OpenType-Fonts-Using-GDI http://stackoverflow.com/questions/6766670/textrenderer-drawtext-using-gdi-to-render -otf-fonts .. search google:https://www.google.co.in/webhp?sourceid=chrome-instant&rlz=1C1CHMO_en-GBIN580IN580&ion=1&espv=2&ie=UTF-8#q=.net+gdi+otf+支持和拼寫= 1 – 2014-08-07 13:05:17

相關問題