3

したがって、プロジェクトに含まれている font.otf ファイルを使用して、c# の PrivateFontCollection に .otf フォント ファイルを追加する必要があります。ファイルがローカルに読み込まれている間、サーバーにデプロイすると次の例外が発生します。

[例外: パスにフォントが見つかりませんでした: 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

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 に答える