2017-06-13 67 views
0

我正在使用GroupDocs查看器拍摄PDF并为其创建HTML页面。我将HTML存储在SQL2012数据库的nvarchar(MAX)字段中。今天我在一些测试中了解到,我们在文档中没有正确渲染某些特殊字符(连字)。存储的Ligature HTML不会呈现

问号突出显示,使他们很容易找到。

这些连字(FL,网络连接,FF)缺少的某些原因。我检查了我的数据库,他们似乎正确地存储在那里。

我检查了我用来加载页面的JsonResult服务器方法,并且我得到了一些混合结果,试图确定我的pageHtml字符串是否具有char。

public async Task<JsonResult> LoadDocument(int contentID, int page) 
{ 
    try 
    { 
     var documentPageData = await APIAccess.Get<DocumentPageUserData>(DocumentPageData.GetDocumentPageRoute, contentID, CurrentUser.UserID, page); 

     JsonResult result = new JsonResult() 
     { 
      ContentEncoding = Encoding.Default, 
      ContentType = "application/json", 
      Data = new 
      { 
       pageHTML = documentPageData.DocumentPage.PageHtml //.Replace("?", "fl").Replace("?", "fi").Replace("?", "ff")  //Don't like this idea 
      }, 
      JsonRequestBehavior = JsonRequestBehavior.AllowGet, 
      MaxJsonLength = int.MaxValue 
     }; 

     return result; 
    } 
    catch (Exception ex) 
    { 
     return Json(string.Format("There was an error loading the page.\r\n\r\nDetails:\r\n{0}", ex.Message), 
      JsonRequestBehavior.AllowGet); 
    } 
} 

当我将鼠标移到DocumentPage.Html上并要求将其呈现为HTML时,它看起来很棒。然而文本渲染有一个<span>?</span>。不知道这是因为文本渲染没有字体或者是否存在其他问题。

在我存储在会话存储的HTML文本,直到页面被请求的客户端,然后我使其成为像这样一个div。

var externalHtml = sessionStorage.getItem(currentPage); 
$('.viewer').text(''); 
$('.viewer').append(externalHtml); 

我已经试过检查网络流量和客户端HTML,但它看起来像它?所以我不确定我在丢失我的角色。有任何想法吗?

+0

它看起来像您的IDE内预览使用不同的字体比你的输出(serif与sans-serif,分别)。输出应该使用什么字体?它是否可以在您的PC上使用或包含在CSS中? –

+0

好抓住。我不确定Group Docs Viewer是在从pdf创建html时嵌入字体的。我的PDF是sans-serif,但我无法确定字体是否与我错误渲染的字体完全匹配。问题是我无法选择特定的字体并将其包含在内,因为我需要用户在PDF中使用的字体。 – JonD

+0

检查该区域的网络选项卡,并且跨度看起来像\ u003cspan \ u003e?\ u003c/span \ u003e似乎暗示在尝试呈现它之前它是一个问号。也许服务器需要字体? – JonD

回答

1

JsonResult未被正确编码。我将ContentEncoding = Encoding.Default更改为ContentEncoding = Encoding.UTF8。之后,它完美呈现。叹息...在这工作了2.5天。

+0

很高兴你明白了:) –