2011-12-18 121 views
2

我在c#中有一個IList,我想通過IText將它放在PDF中。有沒有辦法做到這一點?我一直在尋找它一段時間。Itext Ilist to pdf

什麼,我試圖做的是:

s = BLLstudent.selectStudentById(Convert.ToInt16(Request.QueryString["s"])); 
var data = BLLevk.selectEvkDetailsVanStudent(s.pk_studentID); 

Document mySavedPDF = new Document(); 

FileStream fs = new FileStream(@"C:\Users\Toon\Documents\Visual Studio 2010\WebSites\LilyNoone-LessLes-503729a\prints\" + s.studentNaam + "_" + s.studentVoornaam + ".pdf", FileMode.Create); 
PdfWriter.GetInstance(mySavedPDF, fs); 
mySavedPDF.Open(); 
mySavedPDF.Add(data); 
mySavedPDF.CloseDocument(); 

但這說

錯誤2參數1:無法從 'System.Collections.Generic.IList' 到「System.IO轉換。 TextReader'C:\ Users \ Toon \ Documents \ Visual Studio 2010 \ WebSites \ evk -appatie-181211 \ web \ admin \ a_overzicht_student.aspx.cs 95 77 C:... \ evk-applicatie-181211 \

有沒有辦法直接插入列表?提前

回答

2

沒有

THX,有沒有辦法直接直接添加一個通用IListDocument對象。如果你看看Document.Add method,唯一有效的參數是Element object - 這就是爲什麼Exception被拋出。如果您仔細考慮,試圖將通用IList添加到PDF中將非常困難 - 至少您必須考慮IList元素type以及如何格式化每個成員屬性(在確定這兩種類型之後和在PDF中使用Reflection的成員)。

所以你有幾個選擇。

  • 將您的IList轉換爲簡單的XML表示形式,然後將其發送到XMLWorkerHTMLWorker
  • 編寫自己的包裝或代碼來顯示您的IList。

第二個選擇並不是很差,而且您完全控制瞭如何顯示您的收藏。這裏有一個簡單的例子:

Response.ContentType = "application/pdf"; 
IList<Student> students = Student.GetStudents(); 
using (Document document = new Document()) { 
    PdfWriter writer = PdfWriter.GetInstance(
    document, Response.OutputStream 
); 
    document.Open(); 
    foreach (Student s in students) { 
    document.Add(new Paragraph(string.Format(
     "[{0:D8}] - {1}, {2}. MAJOR: {3}", 
     s.Id, s.NameLast, s.NameFirst, s.Major 
    ))); 
    List list = new List(List.ORDERED); 
    foreach (string c in s.Classes) { 
     list.Add(new ListItem(c)); 
    } 
    document.Add(list); 
    } 
} 

有了一個簡單的類是這樣的:

public class Student { 
    public string NameLast, NameFirst, Major; 
    public int Id; 
    public string[] Classes; 
    public static IList<Student> GetStudents() { 
    string[] majors = {"Math", "Engineering", "CS"}; 
    List<Student> l = new List<Student>(); 
    for (int i = 0; i < majors.Length;) { 
     l.Add(new Student() { 
     Major = majors[i], 
     Id = ++i, NameLast = string.Format("LastNameStudent{0}", i), 
     NameFirst = string.Format("FirstnameStudent{0}", i), 
     Classes = new string[] {"Calc I", "Physics II", "Databases"} 
     }); 
    } 
    return l; 
    } 
}