2017-01-09 27 views
1

我從數據庫中獲取一些值並將其設置到帶標題的itextsharp PdfPCell中。這是我的一段代碼。有什麼簡單的方法來創建itextsharp中的表元素

var a = _db.persons.SingleOrDefault(m => m.id == Person.Id); 

    var table = new PdfPTable(2) {WidthPercentage = 100}; 
    table.DefaultCell.Border = Rectangle.NO_BORDER; 
    var columns = new[] { 50f, 50f }; 
    table.SetWidths(columns); 


    var bt1a = new PdfPCell(new Phrase("Name, surname:", fontGeneralText)); 
    var bt2a = new PdfPCell(new Phrase("Personal Id:", fontGeneralText)); 
    var bt3a = new PdfPCell(new Phrase("Phone number:", fontGeneralText)); 
    var bt4a = new PdfPCell(new Phrase("Department:", fontGeneralText)); 
    var bt5a = new PdfPCell(new Phrase("University:", fontGeneralText)); 
    var bt6a = new PdfPCell(new Phrase("Faculty:", fontGeneralText)); 

    var bt1b = new PdfPCell(new Phrase(a.name_surname, fontBoldText)); 
    var bt2b = new PdfPCell(new Phrase(a.personal_id, fontGeneralText)); 
    var bt3b = new PdfPCell(new Phrase(a.phne_number, fontGeneralText)); 
    var bt4b = new PdfPCell(new Phrase(a.department, fontGeneralText)); 
    var bt5b = new PdfPCell(new Phrase(a.university, fontGeneralText)); 
    var bt6b = new PdfPCell(new Phrase(a.faculty, fontGeneralText)); 

    table.AddCell(bt1a); 
    table.AddCell(bt1b); 

    table.AddCell(bt2a); 
    table.AddCell(bt2b); 

    table.AddCell(bt3a); 
    table.AddCell(bt3b); 

    table.AddCell(bt4a); 
    table.AddCell(bt4b); 

    table.AddCell(bt5a); 
    table.AddCell(bt5b); 

    table.AddCell(bt6a); 
    table.AddCell(bt6b); 

    doc.Add(table); 

但它是ver業餘編碼風格。因爲我寫了相同的結構並只更改參數。 有什麼辦法,以自動化的方法就像使用的foreach等

我認爲它可以通過方式來完成,但是我在這裏之後不知道:

List<string> titles = new List<string>() {"Name, surname:", "Personal Id:", "Phone number:", "Department:", "University:", "Faculty:"}; 

    List<Phrase> datas = new List<Phrase>() { new Phrase(a.name_surname, fontGeneralText), new Phrase(a.personal_id, fontGeneralText), new Phrase(a.phone_number, fontGeneralText), new Phrase(a.department, fontGeneralText), new Phrase(a.university, fontGeneralText), new Phrase(a.faculty, fontGeneralText)}; 


    foreach (var titles in title) 
    { 
     MessageBox.Show(title); 
    } 

回答

2

從代碼上面的例子,你已經有titlesdatas。因此,只要創造必要爲那些兩個集合正確的字體 - 這樣的事情:

List<string> titles = new List<string>() 
{ 
    "Name, surname:", "Personal Id:", "Phone number:", 
    "Department:", "University:", "Faculty:" 
}; 
List<string> datas = new List<string>() 
{ 
    "0", "1", "2", "3", "4", "5" 
}; 
Font timesBold = FontFactory.GetFont("Times-Roman", 8, Font.BOLD); 
Font timesNormal = FontFactory.GetFont("Times-Roman", 8, Font.NORMAL); 

然後這些參數傳遞到一個類似的方法:

// you should also verify titles and datas have same 'Count' 
public void FillTable(List<string> titles, List<string> datas, 
    Font titleFont, Font dataFont) 
{ 
    var table = new PdfPTable(2) { WidthPercentage = 100 }; 
    table.DefaultCell.Border = Rectangle.NO_BORDER; 
    var columns = new[] { 50f, 50f }; 
    table.SetWidths(columns); 

    using (FileStream stream = new FileStream(
     OUT_FILE, 
     FileMode.Create, 
     FileAccess.Write)) 
    { 
     using (var document = new Document()) 
     { 
      PdfWriter.GetInstance(document, stream); 
      document.Open(); 
      for (int i = 0; i < titles.Count; ++i) 
      { 
       table.AddCell(new PdfPCell(new Phrase(titles[i], titleFont))); 
       table.AddCell(new PdfPCell(new Phrase(datas[i], dataFont))); 
      } 
      document.Add(table); 
     } 
    } 
} 
相關問題