Нет, невозможно напрямую добавить универсальный IList
к объекту Document
напрямую. Если вы посмотрите на метод Document.Add , единственным допустимым параметром будет Элемент - поэтому выбрасывается Exception
. Если вы подумаете об этом, попытка добавить общий IList в PDF будет очень трудной - как минимум, вам придется учитывать как элементы IList type
, так и способ форматирования каждого свойства элемента (после определения введите и члены, используя Reflection
) в PDF.
Итак, у вас есть пара вариантов.
- Преобразуйте свой IList в простое представление XML, а затем отправьте его на XMLWorker или HTMLWorker .
- Напишите свою собственную оболочку или код для отображения вашего 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;
}
}