2011-12-18 12 views
2

私はIListをc#で持っています。私はITextを通してPDFにしたいと思います。これを行う方法はありますか?私はしばらくの間それを探してきました。Itextイリスト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.IO」から 'System.Collections.Generic.IList' から変換することはできません。 TextReader 'C:¥Users¥Toon¥Documents¥Visual Studio 2010¥WebSites¥evk-applicatie-181211¥web¥admin¥a_overzicht_student.aspx.cs 95 77 C:... \ evk-applicatie-181211 \

リストを直接挿入しますか?事前

答えて

2

んで

Thxをは、直接が直接DocumentオブジェクトにジェネリックIListを追加に方法はありません。 Document.Add methodを見ると、唯一の有効なパラメータはElement objectです。そのため、Exceptionがスローされます。それについて考えると、一般的なIListをPDFに追加しようとすると、IListの要素typeの両方を考慮する必要があります。また、両方の型を決めるとメンバーはReflectionを使用しています)。

あなたにはいくつかの選択肢があります。

  • IListを単純なXML表現に変換してから、XMLWorkerまたはHTMLWorkerに送信してください。
  • IListを表示する独自のラッパーまたはコードを記述します。

2番目の選択肢はそれほど悪くないので、コレクションの表示方法を完全に制御できます。ここでは簡単な例です。このような単純なクラスで

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; 
    } 
}