3

因此,我需要使用项目中包含的 font.otf 文件将 .otf 字体文件添加到 c# 中的 PrivateFontCollection 中。当文件在本地加载时,我在部署到服务器时收到以下异常。

[异常:在路径中找不到字体:D:\Inetpub\MyApplication\Content\Fonts\ProximaNovaAlt-Black.otf 异常是:System.IO.FileNotFoundException:找不到文件。在 System.Drawing.Text.PrivateFontCollection.AddFontFile(字符串文件名)

但是,当我查看 Web 服务器并导航到该确切目录时,该文件就在那里并且不是只读的。

字体文件在我的项目中的位置如下 /Content/Fonts/ProximaNovaAlt-Black.otf

此外,ProximaNovaAlt-Black.otf 文件的属性如下。
在此处输入图像描述

最后,这是引发错误的代码

     public Font GetFont(float fontSize)
     {
       string path = HttpContext.Current.Server.MapPath(AppDomain.CurrentDomain.BaseDirectory + @"Content\Fonts\ProximaNovaAlt-Black.otf");

       try
       {

          PrivateFontCollection privateFontCollection = new PrivateFontCollection();
          privateFontCollection.AddFontFile(path);               

          return new Font(privateFontCollection.Families[0], fontSize);

          }
          catch (Exception ex)
          {                   
             throw new Exception("Could not find font at path: " + path + "   The exception is: " +  ex.ToString());
          }

}
4

3 回答 3

13

如果字体文件是不受支持的类型 ( http://msdn.microsoft.com/en-us/library/system.drawing.text.privatefontcollection.addfontfile.aspx ),FileNotFoundException 也是引发的异常。TrueType 字体有很好的支持,但对 OpenType 的支持有限。根据我的经验,这似乎因平台而异。

我使用http://everythingfonts.com/otf-to-ttf将我的 OpenType 字体转换为 TrueType并解决了问题。

于 2013-08-01T16:23:47.427 回答
1

试试这个:像资源一样添加字体,然后

PrivateFontCollection privateFontCollection = new PrivateFontCollection();

var memory = IntPtr.Zero;

try
{
    memory = Marshal.AllocCoTaskMem(value.Length);

    Marshal.Copy(value, 0, memory, value.Length);
    privateFontCollection .AddMemoryFont(memory, value.Length);
}
finally
{
    Marshal.FreeCoTaskMem(memory);
}

return new Font(privateFontCollection.Families[0], fontSize);

这对我来说很好。

于 2013-08-07T12:17:54.137 回答
0

Windows 是否加密了服务器机器上的字体文件夹?我曾经发生过这种情况。这很奇怪。Windows 决定为有趣的文件夹加密。

如果文件夹已加密,则 Windows 资源管理器中的文件夹名称应为绿色而不是黑色。

于 2013-08-09T10:33:21.463 回答