Генерация PDF с двумя параллельными таблицами - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь динамически сгенерировать PDF, используя iTextSharp с таблицей данных телефонной книги SQL.Моя программа в настоящее время может генерировать таблицу со всеми необходимыми данными.Table of phone book data

На каждой странице PDF есть только одна длинная таблица, идущая по середине.Я пытаюсь отформатировать PDF, чтобы две таблицы работали параллельно внизу страницы.Когда таблица достигнет нижней части страницы, я хочу, чтобы следующая PdfPRow была верхней частью следующей таблицы.Это мой текущий код C #, чтобы попытаться это.This is my current C# code to attempt this.

Я разбиваю свою таблицу на массив PdfPRows.Затем я повторяю их, добавляя каждую строку в новую таблицу под названием sectionПосле добавления необходимого количества строк я вкладываю таблицу разделов в одну из двух ячеек финальной таблицы.Когда я пытаюсь добавить эту финальную таблицу в PDF, она выдает следующую ошибку:

iTextSharp.text.DocumentException: ссылка на объект не установлена ​​на экземпляр объекта.в iTextSharp.text.pdf.PdfDocument.Add (элемент IElement) в iTextSharp.text.Document.Add (элемент IElement) в _Default.Page_Load (отправитель объекта, EventArgs e) в e: \ Inetpub \ wwwroot \ app \ cts \ phonebook\ DefaultPDF.aspx.cs: строка 211

Я понимаю, что некоторая часть финальной таблицы никогда не инициализировалась, но я не уверен.Раздел после первого цикла for - это попытка исправить эту ошибку.Возможно, в этом нет необходимости.

Есть ли лучший способ сделать это, или я просто делаю это неправильно?

1 Ответ

0 голосов
/ 31 мая 2018

Исходя из предоставленных изображений, это то, что я бы попытался сделать для начала.

Сначала пара известных.

  1. Данные в 2 столбцах непревышать 1 страницу.Если это так, это усложняется.
  2. Таблица PDF записывает ячейки поперек, а затем вниз.С таблицей из 3 столбцов она запишет первые 3 ячейки в первой строке, а затем запишет четвертую ячейку во 2 строке

Я бы установил окончательную таблицу с 7 colmuns, 6 сданные и 1 в качестве разделителя между 2 наборами данных.Затем я бы разделил строки на 2 массива.Вам нужно будет обработать случай нечетного числа.Затем я добавил бы каждую строку ячейку за ячейкой, беря первую строку из каждого списка, чтобы записать первую строку данных таблицы.

  PdfPTable FinalTableN = new PdfPTable( 7 );
  PdfPRow[] n = PDFtableN.Rows.ToArray();

  int half = n.Length/2;
  PdfPRow[] s1 = new PdfPRow[half];
  PdfPRow[] s2 = new PdfPRow[half];

  for (int h = 0; h < half; h++ )
    s1[h] = n[h];
  for ( int h = half; h < n.Length; h++ )
    s2[h-half] = n[h];

  for ( int h = 0; h < half; h++ ) {
    FinalTableN.AddCell( s1[h].GetCells()[0] );
    FinalTableN.AddCell( s1[h].GetCells()[1] );
    FinalTableN.AddCell( s1[h].GetCells()[2] );
    FinalTableN.AddCell( "" );
    FinalTableN.AddCell( s2[h].GetCells()[0] );
    FinalTableN.AddCell( s2[h].GetCells()[1] );
    FinalTableN.AddCell( s2[h].GetCells()[2] );
  }

Вы можете контролировать ширину столбцов, предоставляя float [7] значений в конструктор PdfPTable вместо количества столбцов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...