2015-06-18 46 views
0

我需要從上傳的字體中獲取字體系列名稱。用戶上傳.ttf文件。當我嘗試反序列化數據時,出現以下錯誤「輸入流不是有效的二進制格式。」字體數據通過使用readAsDataURL()的HTML5 FileReader進行上傳。如何從Base64String反序列化上傳的字體?

任何人都可以發現我做錯了什麼嗎?我懷疑我使用了錯誤的反序列化器......但我不確定。

//clean the font data of encoding 
var cleanFontData = brandingsFontAddViewModel.FontData.Split(',')[1]; 
var fontBytes = Convert.FromBase64String(cleanFontData); 

using (Stream memStream = new MemoryStream(fontBytes, 0, fontBytes.Length)) 
{ 
    var deserializer = new BinaryFormatter(); 
    var font = (Font)deserializer.Deserialize(memStream); 
} 
+1

上傳的文件實際上是一個已經在.NET中進行了serlialised的字體對象,還是僅僅是一個正常的文件上傳?如果是後者,那麼你需要找到一些方法來讀取該文件格式。如果前者那麼你也應該告訴我們它是如何被序列化的。 – Chris

+0

@Chris這是一個正常的.ttf文件。 – NullReference

+0

字體類型的二進制(de)序列化不會產生ttf ... –

回答

0

終於找到了答案。

// used to store our font and make it available in our app 
       var pfc = new PrivateFontCollection(); 

       IntPtr data = Marshal.AllocCoTaskMem((int) ms.Length); 

       Marshal.Copy(fontBytes, 0, data, (int)ms.Length); 

       pfc.AddMemoryFont(data, (int)ms.Length); 

       Marshal.FreeCoTaskMem(data); 

       var fontWithMime = "data:application/x-font-truetype;charset=utf-8;base64," + cleanFontData; 

       fontName = pfc.Families[0].Name;