iText 5.0.0大表处理

时间:2019-02-28 19:49:34

标签: itext

直指重点

我正在构造一个大型表,该表从后端获取数据。

我正在使用Itextsharp 5.0.0。由于特定原因,无法升级

我有一个父表,我将所有表都添加为单元格。

在父表中,我要添加以下属性

SplitRows为true SplitLate为false KeepTogether为假

在子表中添加以下属性 KeepTogether为假 splitRows为false; //对于某些表 从被调用到主表的不同函数获取所有行后,我将SetExtendedRow应用于false 然后我将该表添加到pdfdocument。

主表结构

Main Table Structure

private PdfPTable mainTable()
{
   //PdfPTableHelper.Create-> Create Table without border
   //Create(1->Number of column)
   PdfPTable mainTable= PdfPTableHelper.Create(1);
   mainTable.KeepTogether = false;
   mainTable.SplitRows = true;
   mainTable.SplitLate = false;
   foreach(var part in parts)
   {
      ChildTable1(ref mainTable,part);
      ChildTable2(ref mainTable,part); 
      ChildTable3(ref mainTable,part);
   }
   mainTable.SetExtendedRow(false,false);
}
private PdfPTable ChildTable1(ref PdfPTable    mainTable,XElement part)
{
   PdfPTable childTable1 = PdfPTableHelper.Create(4);
   childTable1.KeepTogether = false;
   //CreatePdfCell(Value of the cell, font, number of column)
   childTable1.AddCell(CellHelper.CreatePdfCell("Cell1: "+part.Cell1.value,defaultFont,1));
   childTable1.AddCell(CellHelper.CreatePdfCell("Cell2: "+part.Cell2.value,defaultFont,3));
   childTable1.AddCell(CellHelper.CreatePdfCell("Cell3: "+part.Cell3.value,defaultFont,1));
   childTable1.AddCell(CellHelper.CreatePdfCell("Cell14 "+part.Cell4.value,defaultFont,3));
   childTable1.splitRows = false;//For some table
   mainTable.AddCell(childTable1);
}

类似地,正在创建其他子表并将其添加到主表中

当itext尝试在页面末尾呈现表时,就会出现所有问题。我的目标是内容可以跨页面流动。但不应有任何数据丢失。

如果我们不使用splitRows为false。在某些情况下,我们会丢失如下表的一部分

Data missing from row

在此图像中,您可以看到右侧的cell2内容将转到下一页。 但是在页面末尾,PdfPRow的第一部分被遗漏了。 Itext完全忽略了这一点,并转到该行的下一部分,将其呈现在下一页的开始。

为什么会这样?我厌倦了搜索无法获得任何相关信息 如果我们对该表应用splitRow-> false,则完整的行将转发到下一页。在最后一页中保留大量空间,这是不正常的。

SplitRow -> false

我有以下问题

  1. splitLate的缺点是什么-> false 是否会因为这种情况而发生数据丢失(如果可以的话),我将无法在页面中留出空白。

  2. 应将什么属性应用于父表,以使所有子表保持完整。不会导致任何数据丢失。

我知道Itext 5.0.0已经死了。但是,我无法将其升级到最新版本。

0 个答案:

没有答案