PdfTable не добавлен в мой документ

#c# #.net #itext

#c# #.net #itext

Вопрос:

Вот код:

 public void PrintBoletin(int studentId, int gradeParaleloId)
{
    StudentRepository studentRepo = new StudentRepository();
    var student = studentRepo.FindStudent(studentId);
    int rowHeight = 20;

    string filePath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)   "\Boletin.pdf";
    Document document = new Document(PageSize.LETTER);
    BaseFont baseFont = BaseFont.CreateFont(BaseFont.COURIER, BaseFont.CP1250, BaseFont.EMBEDDED);
    Font font = new Font(baseFont, 8);

    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(filePath, FileMode.Create));
    document.Open();

    GradeParaleloRepository paraRep = new GradeParaleloRepository();
    var gra = paraRep.FindGradeParalelo(gradeParaleloId);
    Paragraph p = new Paragraph(new Phrase("Boletin de Notas - Gestion "   DateTime.Now.Year   " n "   gra.Grade.Name   " "   gra.Name   "n Colegio Madre Vicenta Uboldi n "   DateTime.Now, font));
    Paragraph p2 = new Paragraph(new Phrase("Alumno: "   student.StudentId   " - "   student.LastNameFather   " "   student.LastNameMother   ", "   student.Name, font));

    document.Add(p);
    document.Add(p2);

    PdfPTable table = new PdfPTable(14); //14 Column table.
    table.TotalWidth = 550f;
    float[] widths = new float[] { 1.4f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f, 0.18f };
    table.SetWidths(widths);

    PdfPCell materia = new PdfPCell(new Phrase("MATERIA", font));
    materia.Rowspan = 2;
    materia.Colspan = 2;
    materia.HorizontalAlignment = 1;
    materia.VerticalAlignment = 1;
    table.AddCell(materia);


    table.SpacingBefore = 20f;
    table.SpacingAfter = 20f;

    document.Add(table);
    document.Close();

    Process.Start(filePath);
}
  

Когда я открываю сгенерированный PDF-файл, в документ вообще не добавляется таблица. Добавлены только абзацы. Есть идеи?

Ответ №1:

Вы создаете таблицу с 14 столбцами, но добавляете только один. В PdfPTable вы создаете строки, просто добавляя ячейки. Если количество добавленных ячеек равно ожидаемому номеру столбца, создается строка. Таким образом, если вы добавите только одну ячейку, строка не будет создана.

Кроме того, вы используете ColSpan = 2 , поэтому вам нужно добавить только 7 столбцов в строку.

Я изменил RowSpan на 1, поскольку здесь это плохо работало, когда все ячейки были распределены по строкам, в любом случае не имело смысла охватывать его, так что…

Вот моя модификация, которая создает единственную строку:

 for (int i = 0; i < widths.Length / 2; i  )
{
    PdfPCell materia = new PdfPCell(new Phrase("MATERIA", font));
    materia.Rowspan = 1;
    materia.Colspan = 2;
    materia.HorizontalAlignment = 1;
    materia.VerticalAlignment = 1;
    table.AddCell(materia);
}