2012-11-29 32 views
3

我想加載自定義字體(ttf文件)並用Graphics對象繪製到圖像中。此代碼運行在本地罰款:PrivateFontCollection在Appharbor上失敗

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上動態加載字體?

+0

那麼,有一個名爲FontTest()的方法,測試失敗。更改測試或避免該字體。 –

+0

FontTest不是單元測試。我只是使用該控制器操作來重現此問題。我需要在生產代碼中執行此操作。 –

回答

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

您可以從.ttf名稱中知道爲什麼會拋出異常。請注意文件名稱中的「粗體」。這使得您可以使用FontStyle = Regular創建該字體的實例的機率很低。但有很大的可能性,FontStyle = Bold會起作用。

一個字體通常有多個 .ttf文件,每個FontStyle對應一個字體。假設你有他們,你還必須添加其他文件。

+0

是的,這是問題,不知道爲什麼它在我的本地PC上工作,但不是appharbor。無論如何,這固定它。謝謝 –