Itext Ilist в pdf - PullRequest
       31

Itext Ilist в pdf

2 голосов
/ 18 декабря 2011

У меня есть IList в c #, и я хочу поместить его в PDF через IText. Есть какой-либо способ сделать это? Я долго искал его.

То, что я пытался сделать, было:

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-Applicatie-181211 \ web \ admin \ a_overzicht_student.aspx.cs 95 77 C: ... \ evk-Applicatie-181211 \

Есть ли способ вставить список напрямую?

Спасибо заранее

1 Ответ

2 голосов
/ 19 декабря 2011

Нет, невозможно напрямую добавить универсальный 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;
  }
}
...