2016-07-26 128 views
0

我有一个包含ASP网页API项目iTextSharp的生成阿拉伯字体

一个解决方案,我有使用iTextSharp的创建PDF文档 此文件包含法语和阿拉伯语文字 我用这个代码来获得阿拉伯字体的梅索德:

public static BaseFont GetArabicFont() 
    { 

     var appDomain = System.AppDomain.CurrentDomain; 
     var basePath = appDomain.BaseDirectory; 
     var fontPath = Path.Combine(basePath, "fonts", "pdf", "ARIALUNI.TTF"); 

     try 
     { 
      BaseFont bf = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 
      return bf; 
     } 
     catch (Exception ex) 
     { 

      return BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 

     } 
    } 

当我在IIS 7部署Web API项目时,我调用产生一个pdf的方法之后执行应用程序我可以正确地生成PDF文档(包括法语和阿拉伯语文本) ,但没有响应 什么时候 我用Postmane直接调用API我看到这条消息: “消息”:“发生错误”, “ExceptionMessage”:身份-H不支持的编码名称为”

我不知道问题是IN IIS或我必须更改IDENTITY_H字体? 有人可以帮忙吗?

回答

0

这是没有意义的:

BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 

如果使用BaseFont.IDENTITY_H,iText的将总是嵌入字体。如果没有,iText会创建不符合ISO-32000-1的PDF。这是更正确的这样:

BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 

这并不重要,因为iText的会忽略你的错误,反正嵌入字体,即使你告诉iText的不嵌入它。这就是为什么你的代码在你的机器上正常工作。

你说相同的代码在IIS上不起作用。我假设fontPathARIALUNI.TTF不会导致IIS上的字体。也许字体丢失了;也许IIS无法访问该字体。在这种情况下,抛出一个错误,并在遇到以下行:

return BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 

这行没有意义或者,作为BaseFont.IDENTITY_H不能组合使用BaseFont.TIMES_ROMAN。此外:Times-Roman不包含任何阿拉伯字形,除非您提供PFB文件以及AFM文件,否则您不能嵌入Times-Roman。

解决您的问题的方法是确保ArialUni.ttf存在于您的服务器上,或者您提供另一种支持阿拉伯语的字体。

+0

验证后问题是ArialUni.ttf没有出现在服务器上,当我添加它时,PDF生成了corerctelly – James