2011-05-16 7 views
2

나는 iText 라이브러리를 처음 사용합니다. 필자는 출력물을 PDF로 제공해야하는 요구 사항이 있습니다. pdf에는 아랍어 문자가 있습니다. 나는 아래와 같이 테스트 서블릿을 만들었다.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' –

+0

성공하지'CP1252'를 교체하십시오. – vikka

+0

단지 편집증 적이기 때문에, 테이블의 일부가 아닌 문서에 직접'a'를 추가하십시오. 그래도 작동하지 않는다면 PdfTable 클래스가 문제를 일으키는 것이 아니라는 것을 알고 있습니다. –

답변

3

문제는 라틴 문자에만 적합한 Windows CP1252 문자 세트로 BaseFont를 작성하는 것입니다. 대신 유니 코드 인코딩을 시도해보십시오

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

나는 변화를 만들었다. 그러나 여전히 아랍어 문자가 물음표로 표시됩니다. – vikka

+0

바보 같은 질문이지만 글꼴에 아랍어 글리프가 있음을 확인 했습니까? 시도 할 또 다른 방법은 문자열을 유니 코드 리터럴 (예 : \ u1610 등)으로 Paragraph 생성자에 전달하여 해당 문자열이 수렁에 빠졌는지 확인하는 것입니다. – stevevls

+0

묻고 죄송합니다. 내 글꼴에 아랍어 글리프가 있는지 확인하려면 어떻게해야합니까? 나는 라이센스 오류를 준 내 글꼴 디렉토리에서 일부 글꼴을 사용하려고했습니다. 이제 아랍어를 지원하고 사용하는 글꼴을 다운로드했습니다. – vikka

관련 문제