1

如何使用 C# Windows 窗体应用程序以编程方式在用户的 PC 上安装新字体,以便我可以在此应用程序包含的报告中使用此字体?

4

2 回答 2

4

您可以尝试使用此代码库AddFontResource

[DllImport("gdi32.dll", EntryPoint="AddFontResourceW", SetLastError=true)]
public static extern int AddFontResource([In][MarshalAs(UnmanagedType.LPWStr)]
                                         string lpFileName);

代码

      //Install the font.
      result = AddFontResource(@"C:\MY_FONT_LOCATION\MY_NEW_FONT.TTF");
      error = Marshal.GetLastWin32Error();
      if (error != 0)
      {
        Console.WriteLine(new Win32Exception(error).Message);
      }
      else
      {
        Console.WriteLine((result == 0) ? "Font is already installed." :
                                          "Font installed successfully.");
      }
于 2012-09-11T19:00:19.500 回答
0

根据AddFontResource()的文档

此函数仅为当前会话安装字体。当系统重新启动时,字体将不存在。要在重新启动系统后安装字体,必须在注册表中列出字体。

所以我发现最好的选择是将字体复制到windows字体目录

File.Copy("MyNewFont.ttf",
    Path.Combine(Environment.GetFolderPath(SpecialFolder.Windows),
        "Fonts", "MyNewFont.ttf"));

然后在注册表中添加相应的条目,比如

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts");
                    key.SetValue("My Font Description", "fontname.tff");
                    key.Close();
于 2014-07-12T15:28:35.270 回答