可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Is there a way to do something like this?
FontFamily fontFamily = new FontFamily("C:/Projects/MyProj/free3of9.ttf");
I've tried a variety of variations and haven't been able to get it to work.
UPDATE:
This works:
PrivateFontCollection collection = new PrivateFontCollection(); collection.AddFontFile(@"C:\Projects\MyProj\free3of9.ttf"); FontFamily fontFamily = new FontFamily("Free 3 of 9", collection); Font font = new Font(fontFamily, height); // Use the font with DrawString, etc.
回答1:
This piece of code works for me (WPF):
FontFamily fontFamily = new FontFamily(@"C:\#FONTNAME")
In your example, it would be:
FontFamily fontFamily = new FontFamily(@"C:\Projects\MyProj\#free3of9");
The font name without the file extension, and keep the '#' symbol.
回答2:
This example shows how to add font from byte array - if font is stored in resources. It allows to add font from file too. Following code I am using on winforms:
It is little tricky, for loading TTF font from file you need to do this:
private PrivateFontCollection _privateFontCollection = new PrivateFontCollection(); public FontFamily GetFontFamilyByName(string name) { return _privateFontCollection.Families.FirstOrDefault(x => x.Name == name); } public void AddFont(string fullFileName) { AddFont(File.ReadAllBytes(fullFileName)); } public void AddFont(byte[] fontBytes) { var handle = GCHandle.Alloc(fontBytes, GCHandleType.Pinned); IntPtr pointer = handle.AddrOfPinnedObject(); try { _privateFontCollection.AddMemoryFont(pointer, fontBytes.Length); } finally { handle.Free(); } }