3

我正在尝试加载自定义字体(ttf 文件)并使用 Graphics 对象绘制到图像中。此代码在本地运行良好:

PrivateFontCollection fonts = new PrivateFontCollection();

string path = context.Server.MapPath("~/App_Data/Futura LT Bold.ttf");

if (!System.IO.File.Exists(path))
{
    throw new InvalidOperationException("Font file is not deployed: " + path);
}

fonts.AddFontFile(path);

但是,当在 appharbor 上运行时,对 AddFontFile 的调用会失败并出现以下异常:

System.ArgumentException: Font 'Futura LT Book' does not support style 'Regular'.
at System.Drawing.Font.CreateNativeFont()
at System.Drawing.Font.Initialize(FontFamily family, Single emSize, FontStyle style, GraphicsUnit unit, Byte gdiCharSet, Boolean gdiVerticalFont)
at System.Drawing.Font..ctor(FontFamily family, Single emSize)
at LumenboxWeb.Controllers.GalleryController.FontTest() in d:\temp\h5oqslma.udd\input\src\LumenboxWeb\Controllers\GalleryController.cs:line 59
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)

我尝试了不同的字体,它们都在本地工作,但在 appharbor 上都没有。

是否可以在 appharbor 上动态加载字体?

4

1 回答 1

3
string path = context.Server.MapPath("~/App_Data/Futura LT Bold.ttf");
fonts.AddFontFile(path);

您可以从 .ttf 名称中看出为什么会引发异常。请注意文件名中的“粗体”。这使得您可以使用 FontStyle = Regular 创建该字体的实例的可能性相当低。但很有可能 FontStyle = Bold 会起作用。

一个字体通常有多个.ttf 文件,每个 FontStyle 一个。假设您有其他文件,您还必须添加它们。

于 2012-11-29T17:02:46.000 回答