2011-05-16 76 views
2

我是iText庫的新手。我有一個要求,我需要提供PDF格式的輸出。 pdf中有阿拉伯字符。我創建了一個測試servlet,如下所示。Itext阿拉伯字體來問號

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

response.setContentType ("application/pdf;charset=UTF-8"); 
Document document = new Document(); 
    try{ 
     PdfWriter.getInstance(document, 
      response.getOutputStream()); // Code 2 
     document.open(); 

     Font f1; 
    BaseFont bf = BaseFont.createFont("C:\\WINDOWS\\Fonts\\ARIALUNI.ttf", BaseFont.CP1252, true); 
    f1 = new Font(bf, 10); 

     PdfPTable table = new PdfPTable(2); 
     table.addCell("hellooooo1"); 
     table.addCell("world2"); 
     table.addCell("1113"); 
     table.addCell("422"); 

// String a = "يبسبيبيبيسسسيبيببيسبيسيببي"; 
    String a = "سش"; 
    PdfPCell cell = new PdfPCell (new Paragraph (a,f1)); 
    table.addCell (cell); 
    cell = new PdfPCell (new Paragraph ("Road",f1)); 
    table.addCell (cell); 

     document.add(table);   
     document.close(); 
    }catch(DocumentException e){ 
     e.printStackTrace(); 
    } 
} 

的出來放在哪裏,我們使用阿拉伯語字符被顯示爲????? 。 如何糾正這個問題?我犯了什麼錯誤?

+0

試着用'IDENTITY_H' – 2011-05-16 07:29:28

+0

沒有成功替換'CP1252' ...它仍然顯示僅問號。 – vikka 2011-05-16 10:23:48

+0

只是要偏執,嘗試直接添加'a'到文檔而不是表格的一部分。如果這不起作用,我們知道這不是導致問題的PdfTable類。 – 2011-05-17 20:58:54

回答

3

您的問題是您使用Windows CP1252字符集(僅適用於拉丁字符)創建BaseFont的位置。嘗試編碼對Unicode來代替:

BaseFont bf = BaseFont.createFont("C:\\WINDOWS\\Fonts\\ARIALUNI.ttf", BaseFont.IDENTITY_H, true); 
+0

我做了改變。但仍然顯示爲問號的阿拉伯字符。 – vikka 2011-05-16 08:53:42

+0

愚蠢的問題,但你已經證實你的字體有阿拉伯字形,對吧?另一件要嘗試的事情是將你的字符串作爲unicode字面值(例如\ u1610等)傳遞給段落構造函數,以查看它們是否變成了現場。 – stevevls 2011-05-16 10:53:49

+0

對不起,如何檢查我的字體是否有阿拉伯字形?我試圖從我的Windows字體目錄中使用一些字體,這給了我許可錯誤。現在我已經下載了一些支持阿拉伯語並使用它們的字體。 – vikka 2011-05-17 08:30:03