我有一个项目需要从磁盘加载Postscript字体。 我发现我可以使用“AddFontFile”。做一些研究我发现我必须将两种字体http://msdn.microsoft.com/en-us/library/system.drawing.text.privatefontcollection.addfontfile.aspx一起管道,所以我尝试了:
fontCollection = new PrivateFontCollection();
fontCollection.AddFontFile(@"C:\Temp\Font\myfont.PFM|C:\Temp\Font\myfont.PFB");
我收到错误“路径中的非法字符”。 我不确定我是否正确使用这两种字体。
任何帮助都会很棒,我应该提到我们仍然在XP上,不确定是否会产生不同之处。
麦克
答案 0 :(得分:0)
您的文件名中不能包含管道|
字符。 PrivateFontCollection.AddFontFile需要有效的文件路径。因此,你的“路径中的非法字符”例外。 MSDN的输入是A String that contains the file name of the font to add.
尝试一次传递一个文件 - 我不知道这个管道的想法..
至于你的Postscript愿望,备注部分指出OpenTypes的支持有限。
答案 1 :(得分:0)
经过一番搜索,我得到了它的工作,我想分享一下我是如何解决这个问题的: AddFontFile是错误的API我需要使用AddFontResource而不是
String fontPath = @"C:\Temp\Font2\GXSTRA03.PFM|C:\Temp\Font2\GXSTRA03.PFB";
int result = AddFontResource(fontPath);
long msg = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
删除字体资源
RemoveFontResource(@"C:\Temp\Font2\GXSTRA03.PFM|C:\Temp\Font2\GXSTRA03.PFB");
long msg = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero);
如果有人在进行外部WinApi调用时是新手,那么我使用的是导入和导入DLL代码
using System.Runtime.InteropServices;
private static uint WM_FONTCHANGE = 0x1D;
Import("gdi32.dll")]
static extern int AddFontResource(string lpFilename);
[DllImport("gdi32.dll")]
static extern bool RemoveFontResource(string lpFileName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
此字体现在显示在word和记事本中..