2013-03-25 146 views
2

我使用自定義Urdu字體Jameel Noori Nastaleeq與iTextSharp,但它根本不顯示文本。它顯示的文字,當我使用內置的報表,如TIMES.TTF等iTextSharp不呈現自定義urdu字體

守則如下:

private void button1_Click(object sender, EventArgs e) 
     { 

      Document document = new Document(); 
      try 
      { 
       PdfWriter writer = PdfWriter.GetInstance(document, new System.IO.FileStream("C:\\iTextSharpHelloworld.pdf", System.IO.FileMode.Create)); 
       document.Open(); 
       string fontpath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\Jameel Noori Nastaleeq.ttf"; 
       //string fontpath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\times.ttf"; 
       BaseFont basefont = BaseFont.CreateFont(fontpath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
       iTextSharp.text.Font arabicFont = new iTextSharp.text.Font(basefont, 24, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLUE); 
       var el = new Chunk(); 
       iTextSharp.text.Font f2 = new iTextSharp.text.Font(basefont, el.Font.Size, 
       el.Font.Style, el.Font.Color); 
       el.Font = arabicFont; 
       PdfPTable table = new PdfPTable(1); 

       table.RunDirection = PdfWriter.RUN_DIRECTION_RTL; 


       var str = "نام : "; 
       PdfPCell cell = new PdfPCell(new Phrase(10, str, el.Font)); 
       table.AddCell(cell); 

       document.Add(table); 
       document.Close(); 
       MessageBox.Show("Done"); 

      } 
      catch (DocumentException de) 
      { 
       // this.Message = de.Message; 
       MessageBox.Show(de.Message); 
      } 
      catch (System.IO.IOException ioe) 
      { 
       // this.Message = ioe.Message; 
       MessageBox.Show(ioe.Message); 
      } 

      // step 5: we close the document 
      document.Close(); 
     } 
    } 

更新:設置cell.ArabicOptions = ColumnText.DIGITS_EN2AN;不渲染字體,我需要的字體,但沒有任何其他文本。

+0

首先,我必須道歉,因爲我對英語以外的任何語言都不太熟悉。當我嘗試使用您提供的字體時,我也看不到任何東西,但是當我嘗試其他字體(如Tahoma或Courier)時,我在PDF中看到了文字。當我分析原始PDF文件時,當我使用字體時,字符不會被包含在內。但是,當我改變運行方向時,我會看到你的字體。這讓我相信你的特定字體有問題。出於某種原因,iText無法處理RTL。不幸的是,我對字體瞭解不多,所以我無法幫助太多。 – 2013-03-25 14:13:03

+0

該問題已在itext-questions郵件列表上得到解答:http://itext-general.2136553.n4.nabble.com/Issue-in-rendering-Custom-Urdu-Font-tt4657895.html#a4657907 – mkl 2013-03-26 01:37:48

+0

@ChrisHaas感謝您的回答。 HTML Worker的東西可以幫助整理出來嗎? ABCPdf也看不到字體,但是當他們使用HTML代碼時,我能夠看到它。是否可以在我的HTML或CSS中提及* font-family *並且iTextSharp可以解析它? – Volatil3 2013-03-26 20:23:30

回答

0

在阿拉伯語中我用下面的字體寫:

這裏是阿拉伯語創建一個訂單的例子是烏爾都語

相同
BaseFont basefontArabic = BaseFont.CreateFont("c:\\\\windows\\\\fonts\\\\TIMES.ttf", BaseFont.IDENTITY_H, true); 
iTextSharp.text.Font farabicNormal = new iTextSharp.text.Font(basefontArabic, 10, iTextSharp.text.Font.NORMAL); 
iTextSharp.text.Font farabicBold = new iTextSharp.text.Font(basefontArabic, 12, iTextSharp.text.Font.BOLD); 

`Document document = new Document(PageSize.A4); 
       document.SetMargins(10f, 10f, 10f, 30f); 
       PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(FileName+ ".pdf", FileMode.Create)); 

       document.Open(); 

       PdfPTable table = new PdfPTable(5) { RunDirection = PdfWriter.RUN_DIRECTION_RTL, HeaderRows = 1 }; 
       table.SetWidths(new float[] { 1, 1, 1, 2, 1 }); 

       table.AddCell(new PdfPCell(new Phrase("الكمية", ReportDesigner.farabicNormal)) { GrayFill = 0.95f, HorizontalAlignment=Element.ALIGN_CENTER }); 
       table.AddCell(new PdfPCell(new Phrase("نوع السلعة", ReportDesigner.farabicNormal)) { GrayFill = 0.95f, HorizontalAlignment = Element.ALIGN_CENTER }); 
       table.AddCell(new PdfPCell(new Phrase("الوزن الصافي", ReportDesigner.farabicNormal)) { GrayFill = 0.95f, HorizontalAlignment = Element.ALIGN_CENTER }); 
       table.AddCell(new PdfPCell(new Phrase("س . ف", ReportDesigner.farabicNormal)) { GrayFill = 0.95f, HorizontalAlignment = Element.ALIGN_CENTER }); 
       table.AddCell(new PdfPCell(new Phrase("الجملة", ReportDesigner.farabicNormal)) { GrayFill = 0.95f, HorizontalAlignment = Element.ALIGN_CENTER }); 

       foreach (OrderDetailsEntity item in Order.Details) 
       { 
        table.AddCell(new PdfPCell(new Phrase(item.Quantité.ToString("N3"), ReportDesigner.farabicNormal))); 
        table.AddCell(new PdfPCell(new Phrase(item.ArticleLigneFacture.Désignation, ReportDesigner.farabicNormal))); 
        table.AddCell(new PdfPCell(new Phrase(item.QantitéEmballage.ToString("N3"), ReportDesigner.farabicNormal))); 
        table.AddCell(new PdfPCell(new Phrase(item.PrixAchatUnitaire.ToString("N3"), ReportDesigner.farabicNormal))); 
        table.AddCell(new PdfPCell(new Phrase(item.TotalLigneFacture.ToString("N3"), ReportDesigner.farabicNormal))); 
       } 
document.Add(table); 
       document.Close();` 

OutPut

+0

它不適用於自定義烏爾都語字體,如* Jameel Nastaleeq *或其他* Nastaleeq *字體 – Volatil3 2013-12-29 16:22:43