Когда я добавляю несколько таблиц в iText7 pdf, а количество таблиц больше, чем подходит на одной странице, генерируется следующее исключение.itext7 автоматически не создает новую pdf-страницу
Исключение: «Ссылка на объект не установлена в экземпляр объекта». Источник: "itext.layout" StackTrace: «в iText.Layout.Renderer.TableRenderer.Layout (LayoutContext layoutContext) в iText.Layout.Renderer.RootRenderer.AddChild (IRenderer визуализатора) в iText.Layout.RootElement
1.Add[T2](BlockElement
1 элемент) на iText.Layout.Document.Add [T] (BlockElement`1 элемент) в iTextSharp7_Test.Controllers.PdfController.ReplicateBug (String pdfFile) в C: \ Users \ мне \ Documents \ Visual Studio 2015 \ Проекты \ App_Test \ iTextSharp7_Test \ Контроллеры \ PdfController.cs: линия 443"
В приведенном примере исключение генерируется при добавлении шестой таблицы.
Единственный способ, которым я смог справиться с этой проблемой, заключается в том, что исключение создается путем добавления дополнительных данных в pdf, чем в одной странице, и добавления новой страницы в блок catch try, решение, которое очень уродливый и не очень хороший в долгосрочной перспективе.
Пример:
public void ReplicateBug(string pdfFile)
{
iText.Kernel.Pdf.PdfWriter writer = null;
iText.Kernel.Pdf.PdfDocument pdf = null;
iText.Layout.Document document = null;
try
{
writer = new iText.Kernel.Pdf.PdfWriter(pdfFile);
pdf = new iText.Kernel.Pdf.PdfDocument(writer);
document = new iText.Layout.Document(pdf, iText.Kernel.Geom.PageSize.A4);
document.Add(new iText.Layout.Element.Paragraph("*** PRODUCTS ***"));
iText.Kernel.Pdf.Canvas.Draw.DashedLine dashedLine = new iText.Kernel.Pdf.Canvas.Draw.DashedLine();
document.Add(new iText.Layout.Element.LineSeparator(dashedLine));
iText.Layout.Element.Table table = null;
for (int i = 0; i < 10; ++i)
{
iText.Layout.Element.Cell cell = null;
table = new iText.Layout.Element.Table(2);
table.SetMarginTop(10);
cell = new iText.Layout.Element.Cell().Add("-- PRODUCT --");
table.AddCell(cell);
cell = new iText.Layout.Element.Cell(3, 1).Add("image");
cell.SetHorizontalAlignment(iText.Layout.Properties.HorizontalAlignment.CENTER);
cell.SetVerticalAlignment(iText.Layout.Properties.VerticalAlignment.MIDDLE);
table.AddCell(cell);
cell = new iText.Layout.Element.Cell().Add("Product text." + Environment.NewLine + "Welcome");
cell.SetHeight(75);
table.AddCell(cell);
cell = new iText.Layout.Element.Cell().Add((i + 1).ToString().PadLeft(10, '0'));
table.AddCell(cell);
try
{
document.Add(table);
document.Add(new iText.Layout.Element.LineSeparator(dashedLine)); // Default LineWidth is 1
}
catch
{
// NOTE: After adding 5 tables to the pdf an exception is thrown of the following kind.
// Exception: "Object reference not set to an instance of an object."
// Source: "itext.layout"
// StackTrace: "at iText.Layout.Renderer.TableRenderer.Layout(LayoutContext layoutContext)
// at iText.Layout.Renderer.RootRenderer.AddChild(IRenderer renderer)
// at iText.Layout.RootElement`1.Add[T2](BlockElement`1 element)
// at iText.Layout.Document.Add[T](BlockElement`1 element)
// at iTextSharp7_Test.Controllers.PdfController.ReplicateBug(String pdfFile) in C:\\Users\\me\\Documents\\Visual Studio 2015\\Projects\\App_Test\\iTextSharp7_Test\\Controllers\\PdfController.cs:line 443"
}
}
document.Close();
pdf.Close();
writer.Close();
}
catch
{
if (document != null)
{
document.Close();
}
if (pdf != null)
{
pdf.Close();
}
if (writer != null)
{
writer.Close();
}
throw;
}
}
Заранее спасибо