2011-02-04 12 views
6

: Burada enter image description hereKod benim PDF yatay çizgi çizerek değil benim pdf dosyası gerçek değerlerden başlık metnini bölmek için üstüne bir yatay çizgi eklemek çalışıyorum

kodum var:

public class StudentList 
{ 
    public void PrintStudentList(int gradeParaleloID) 
    { 
     StudentRepository repo = new StudentRepository(); 
     var students = repo.FindAllStudents() 
          .Where(s => s.IDGradeParalelo == gradeParaleloID); 

     try 
     { 
      Document document = new Document(PageSize.LETTER); 

      PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\Alumnos.pdf", FileMode.Create)); 
      document.Open(); 

      PdfContentByte cb = writer.DirectContent; 
      cb.SetLineWidth(2.0f); // Make a bit thicker than 1.0 default 
      cb.SetGrayStroke(0.95f); // 1 = black, 0 = white 
      cb.MoveTo(20, 30); 
      cb.LineTo(400, 30); 
      cb.Stroke(); 

      PdfPTable table = new PdfPTable(3);     
      float[] widths = new float[] { 0.6f, 0.75f, 2f }; 
      table.SetWidths(widths); 
      PdfPCell numeroCell = new PdfPCell(new Phrase("Nro.")); 
      numeroCell.Border = 0; 
      numeroCell.HorizontalAlignment = 0; 
      table.AddCell(numeroCell); 

      PdfPCell codigoCell = new PdfPCell(new Phrase("RUDE")); 
      codigoCell.Border = 0; 
      codigoCell.HorizontalAlignment = 0; 
      table.AddCell(codigoCell); 

      PdfPCell nombreCell = new PdfPCell(new Phrase("Apellidos y Nombres")); 
      nombreCell.Border = 0; 
      nombreCell.HorizontalAlignment = 0; 
      table.AddCell(nombreCell); 

      int c = 1; 
      foreach (var student in students) 
      { 
       PdfPCell cell = new PdfPCell(new Phrase(c.ToString())); 
       cell.Border = 0; 
       cell.HorizontalAlignment = 0; 
       table.AddCell(cell); 

       cell = new PdfPCell(new Phrase(student.Rude.ToString())); 
       cell.Border = 0; 
       cell.HorizontalAlignment = 0; 
       table.AddCell(cell); 

       cell = new PdfPCell(new Phrase(student.LastNameFather + " " + student.LastNameMother + " " + student.Name)); 
       cell.Border = 0; 
       cell.HorizontalAlignment = 0; 
       table.AddCell(cell); 
       c++; 
      } 
      table.SpacingBefore = 20f; 
      table.SpacingAfter = 30f; 

      document.Add(table); 
      document.Close(); 
     } 
     catch (DocumentException de) 
     { 
      Debug.WriteLine(de.Message); 
     } 
     catch (IOException ioe) 
     { 
      Debug.WriteLine(ioe.Message); 
     } 

    } 
} 

Neden cb.Stroke() neden çalışmıyor anlamıyorum. Baska öneri?

+0

: SetGrayStroke aslında 0 = siyah gibi görünüyor , 1 = beyaz. –

cevap

12

iTextSharp'ın PdfContentByte sınıfı ile çizim biraz kafa karıştırıcı olabilir. Yükseklik aslında tabana değil, tabana göredir. Bu yüzden sayfanın üst kısmı 0f değil, bunun yerine, PageSize.LETTER sayfa boyutunda 726f olan document.Top. Yani 30 ünite üstünden senin çizgi çizmek istiyorsanız, deneyin:

cb.MoveTo(20, document.Top - 30f); 
cb.LineTo(400, document.Top - 30f); 

Sadece merak - neden tablo sınırları kullanmak yerine zor yöntemi? (Sınırlarını 0'a ayarladığını farkettim.) Çizgiyi elden çıkarmak için uğraşmak en büyük acıdır. İçeriği PDF'nizde taşıyıp taşımadıysanız, ölçümlerinizin hala çalıştığından emin olmanız gerekir.

bu deneyin:

numeroCell.Border = 0; 
numeroCell.BorderColorBottom = new BaseColor(System.Drawing.Color.Black); 
numeroCell.BorderWidthBottom = 1f; 

codigoCell.Border = 0; 
codigoCell.BorderColorBottom = new BaseColor(System.Drawing.Color.Black); 
codigoCell.BorderWidthBottom = 1f; 

nombreCell.Border = 0; 
nombreCell.BorderColorBottom = new BaseColor(System.Drawing.Color.Black); 
nombreCell.BorderWidthBottom = 1f; 

size başlık satırı altında güzel bir katı siyah çizgiyi vermelidir Yani, hiçbir ölçüm gereklidir: Bilginize

Table border sample

+0

Bu harika! Teşekkür ederim! –

İlgili konular