2015-09-17 33 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()后的路径,并确定该文件实际存在,并且您可以从您的应用程序访问它。
  • 正如你所说,你已经在服务器上安装了字体,你可以简单地尝试使用字体的全名。确保它们实际上已经正确安装并且您使用的是正确的名称。