2015-09-17 51 views
1

我們在我們的MVC .NET項目中使用Proxima Nova字體(特別是Proxima Nova Condensed regular),但它們不會正確嵌入到PDF輸出中。在查看PDF屬性時,我看到列出了「ProximaNovaCond-Regular(嵌入式)」,其旁邊的圖標看起來像一個帶有灰色「F」的頁面。我還看到Arial Narrow和Arial Narrow,Bold以「(嵌入子集)」列出,並且該文檔似乎是默認的。字體不會嵌入ABCpdf

我不使用的CSS @字體面,而是這樣做:

font-family: "Proxima Nova Cn Rg", "Proxima Nova Cond", "Proxima Nova Condensed"; 

在生成頁面控制器功能,有這樣的代碼:

var targetDocument = CreateNewDoc(orientation, paperSize); 
targetDocument.HtmlOptions.FontEmbed = true; 
targetDocument.HtmlOptions.FontSubset = false; 
targetDocument.HtmlOptions.FontSubstitute = false; 
targetDocument.HtmlOptions.FontProtection = false; 
targetDocument.Font = targetDocument.EmbedFont(Server.MapPath("\\Content\\fonts\\proxima-nova\\ProximaNova-Reg-webfont.ttf")); 
targetDocument.Font = targetDocument.EmbedFont(Server.MapPath("\\Content\\fonts\\proxima-nova\\ProximaNova-Sbold-webfont.ttf")); 

如果項目在本地運行,字體似乎可以工作,但不在服務器上。字體安裝在服務器上。我們可能會忽略字體或我們如何嵌入它們?我研究了關於字體嵌入的幾個不同的其他問題,但是他們都沒有提供任何解決方案來解決我們的情況。我不確定在這裏提供的其他信息,但讓我知道可能需要什麼來回答我的問題,我會找到它。

編輯: 我可以發誓我更新了這個...道歉的響應者。不幸的是,我無法接受任何答案,因爲我們無法解決問題。

+1

你是如何在服務器上安裝字體的? – Caveman

+0

嗨 - 我有類似的問題。由於我在comm下使用ActiveX DLL,所以它的環境很差,但是我試圖從特定路徑添加一個'private'字體。 DLL可以訪問字體並在由PDF生成的位圖中生成精確的字形,但PDF包含Times New Roman而不是預期的字體。系統在Win2008上運行良好 - 移植到Win2012後發生問題。你解決了你的問題嗎? –

回答

-1

對於targetDocument.EmbedFont的第一個參數,您需要指定字體字體,而不是字體的物理路徑。

例如

targetDocument.EmbedFont("Arial Regular"); 

要獲得正確的類型名稱,請轉到控制面板\ Explorer中的所有控制面板項目\字體。找到你的字體。您需要指定字體,而不是字體系列。例如對於Arial,請指定「Arial Bold」或「Arial Regular」。

您可以通過檢查EmbedFont的返回值是否爲非零來檢查您的字體是否正確返回。

+0

這是不正確的,從abcpdf文檔:「如果您需要動態加載字體,您可以傳遞此方法一個路徑到您的字體文件。」 – monty

+0

謝謝,糾正。我沒有在文檔中看到這一點。我一定會嘗試一下。 – AntonK

0

您可以使用他們的名字嵌入字體,也可以從文件動態加載字體。你似乎試圖做後者,但那是行不通的。我會做什麼:

  • 檢查Server.MapPath()後的路徑,並確定該文件實際存在,並且您可以從您的應用程序訪問它。
  • 正如你所說,你已經在服務器上安裝了字體,你可以簡單地嘗試使用字體的全名。確保它們實際上已經正確安裝並且您使用的是正確的名稱。