AddFontFile XP C#

时间:2013-09-23 21:30:19

标签: c# fonts

我有一个项目需要从磁盘加载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上,不确定是否会产生不同之处。

麦克

2 个答案:

答案 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和记事本中..