2016-06-14 5 views
0

это мой кодарабские буквы данных в экспорте данных в формат PDF

Cell cellColss = new Cell();  
BaseFont bfArialUniCode = BaseFont.CreateFont(@"D:\ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
iTextSharp.text.Font font = new iTextSharp.text.Font(bfArialUniCode, 12); 
Chunk chunkColss = new Chunk("مسلسل",font); 
cellColss.Add(chunkColss); 
pdfTable.AddCell(cellColss); 

вывезенного, данные выглядит следующим образом: formatted data

оказывается "مسلسل", как "ل س ل س م"

после того как я добавил этот код

PdfPCell pdfCell = new PdfPCell(new Phrase("مسلسل", font)); 
pdfCell.RunDirection=PdfWriter.RUN_DIRECTION_RTL; 

вместо о е

Chunk chunkColss = new Chunk("مسلسل",font);` 

ничего не появляется

Примечание: - установить последнюю последнюю версию iTextShare

Это полный код

Document pdfDoc = new Document(PageSize.A4, 30, 30, 40, 25); 
      System.IO.MemoryStream mStream = new System.IO.MemoryStream(); 
      PdfWriter writer = PdfWriter.GetInstance(pdfDoc, mStream); 
      int cols = dataTable.Columns.Count; 
      int rows = dataTable.Rows.Count; 
      pdfDoc.Open(); 

      iTextSharp.text.Table pdfTable = new iTextSharp.text.Table(3, rows); 
      pdfTable.BorderWidth = 1; 
      pdfTable.Width = 100; 
      pdfTable.Padding = 1; 
      pdfTable.Spacing = 1; 
      BaseFont bfArialUniCode = BaseFont.CreateFont(@"D:\ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
      iTextSharp.text.Font font = new iTextSharp.text.Font(bfArialUniCode, 12);   
      for (int i = 0; i < cols; i++) 
      { 
       if (i == 0) 
       { 
        Cell cellColss = new Cell();    
        Chunk chunkColss = new Chunk("مسلسل", font); 
        string ss = "مسلسل"; 
        string bytes = Encoding.UTF8.GetEncoder().ToString(); 
        PdfPCell pdfCell = new PdfPCell(new Phrase(chunkColss)); 
        pdfCell.RunDirection = PdfWriter.RUN_DIRECTION_RTL; 
        cellColss.Add(pdfCell); 
        pdfTable.AddCell(cellColss); 
       } 

       if (dataTable.Columns[i].ColumnName == "Barcode") 
       { 
        Cell cellCols = new Cell(); 
        Chunk chunkCols = new Chunk("باركود", font); 
        cellCols.Add(chunkCols); 
        pdfTable.AddCell(cellCols); 
       } 
       else if (dataTable.Columns[i].ColumnName == "Description") 
       { 
        Cell cellCols = new Cell(); 
        Chunk chunkCols = new Chunk("اسم الصنف بالعربى والانجليزى", font); 
        cellCols.Add(chunkCols); 
        pdfTable.AddCell(cellCols); 
       } 

      } 
      for (int k = 0; k < rows; k++) 
      { 
       for (int j = 0; j < cols; j++) 
       { 
        if (j == 0) 
        { 
         Cell cellRows1 = new Cell();      
         Chunk chunkRows2 = new Chunk((k + 1).ToString(), font); 
         cellRows1.Add(chunkRows2); 
         pdfTable.AddCell(cellRows1); 
        } 

        if (dataTable.Columns[j].ColumnName == "Barcode") 
        { 
         Cell cellRows = new Cell();      
         Chunk chunkRows = new Chunk(dataTable.Rows[k][j].ToString(), font); 
         cellRows.Add(chunkRows); 
         pdfTable.AddCell(cellRows); 
        } 
        else if (dataTable.Columns[j].ColumnName == "Description") 
        { 
         Cell cellRows = new Cell();      
         Chunk chunkRows = new Chunk(dataTable.Rows[k][j].ToString(), font); 
         cellRows.Add(chunkRows); 
         pdfTable.AddCell(cellRows); 

        } 
       } 
      } 

      pdfDoc.Add(pdfTable); 
      pdfDoc.Close(); 
      Response.ContentType = "application/pdf"; 
      Response.AddHeader("Content-Disposition", "attachment; filename=Report.pdf"); 
      Response.Clear(); 
      Response.BinaryWrite(mStream.ToArray()); 
      Response.End(); 
+0

@BrunoLowagie этот ответ не решает проблему –

+0

Это всегда плохая идея, чтобы не использовать обозначения Unicode. Во всяком случае: это работает для нас. Проблем не решить. Возможно, вы не используете недавнюю/официальную версию iTextSharp. –

+0

@BrunoLowagie У меня уже есть последняя версия, которую я устанавливаю 'Install-Package itextsharp' –

ответ

1

Вы можете использовать:

PdfPCell pdfCell = new PdfPCell(new Phrase("مسلسل", font)); 
pdfCell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 

Аналогичный пример находится в следующей ссылке: ITextPdf: Printing Arabic strings from Right To Left (RTL)

+0

ничего не появляется, когда я добавляю этот код вместо 'Chunk chunkColss = new Chunk (" مسلسل ", font); ' –

Смежные вопросы