2016-07-26 130 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