PdfPTable 更喜欢 SplitRows false
PdfPTable Prefer SplitRows false
将 PdfPTable 与 ColumnText 一起使用是否可能更喜欢不拆分行,但如果它不适合则拆分?这是一个 table 的示例,其中只有一行和一列无法放在一页上,
using (var ms = new MemoryStream())
{
var doc = new Document(PageSize.LETTER, 72f, 72f, 72f, 72f);
var writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
var canvas = writer.DirectContent;
var ct = new ColumnText(canvas);
var text = new StringBuilder();
for (int i = 0; i < 40; ++i)
text.AppendLine(i.ToString());
// Add a table with a single row and column that doesn't fit on one page
var t = new PdfPTable(1);
t.SplitLate = true;
t.SplitRows = false;
t.WidthPercentage = 100f;
var c = new PdfPCell();
c.HorizontalAlignment = Element.ALIGN_LEFT;
c.VerticalAlignment = Element.ALIGN_TOP;
c.Border = Rectangle.NO_BORDER;
c.BorderWidth = 0;
c.Padding = 0;
c.AddElement(new Paragraph(text.ToString()));
t.AddCell(c);
ct.AddElement(t);
int status = 0;
while (ColumnText.HasMoreText(status))
{
ct.SetSimpleColumn(doc.Left, doc.Bottom, doc.Right, doc.Top);
status = ct.Go();
if (ColumnText.HasMoreText(status))
doc.NewPage();
}
doc.Close();
File.WriteAllBytes("d:\test.pdf", ms.ToArray());
}
我正在使用 SplitLate = true
和 SplitRows = false
。调用 Go() returns table.
的状态为 2 (NO_MORE_COLUMN
)
在此示例中,table 将跨越一页以上。我希望通过使用 SplitLate
和 SplitRows
我可以让 ColumnText 在可能的时候将一行保持在一起,并在需要的时候拆分它。
当返回状态 2 时,我是否需要对 ColumnText 执行某些操作,以便 table 执行我想要执行的操作?在这个简单的示例中,我显然知道 table 不适合并且可以将 SplitRows
设置为 true,但在更复杂的示例中,数据是动态的并且 table 的大小或者 table 将继续的页面是未知的(或不容易知道的),我怎样才能让 table 表现得像这样?
这已被 iText 团队确定为错误,将在即将发布的版本中修复。
将 PdfPTable 与 ColumnText 一起使用是否可能更喜欢不拆分行,但如果它不适合则拆分?这是一个 table 的示例,其中只有一行和一列无法放在一页上,
using (var ms = new MemoryStream())
{
var doc = new Document(PageSize.LETTER, 72f, 72f, 72f, 72f);
var writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
var canvas = writer.DirectContent;
var ct = new ColumnText(canvas);
var text = new StringBuilder();
for (int i = 0; i < 40; ++i)
text.AppendLine(i.ToString());
// Add a table with a single row and column that doesn't fit on one page
var t = new PdfPTable(1);
t.SplitLate = true;
t.SplitRows = false;
t.WidthPercentage = 100f;
var c = new PdfPCell();
c.HorizontalAlignment = Element.ALIGN_LEFT;
c.VerticalAlignment = Element.ALIGN_TOP;
c.Border = Rectangle.NO_BORDER;
c.BorderWidth = 0;
c.Padding = 0;
c.AddElement(new Paragraph(text.ToString()));
t.AddCell(c);
ct.AddElement(t);
int status = 0;
while (ColumnText.HasMoreText(status))
{
ct.SetSimpleColumn(doc.Left, doc.Bottom, doc.Right, doc.Top);
status = ct.Go();
if (ColumnText.HasMoreText(status))
doc.NewPage();
}
doc.Close();
File.WriteAllBytes("d:\test.pdf", ms.ToArray());
}
我正在使用 SplitLate = true
和 SplitRows = false
。调用 Go() returns table.
NO_MORE_COLUMN
)
在此示例中,table 将跨越一页以上。我希望通过使用 SplitLate
和 SplitRows
我可以让 ColumnText 在可能的时候将一行保持在一起,并在需要的时候拆分它。
当返回状态 2 时,我是否需要对 ColumnText 执行某些操作,以便 table 执行我想要执行的操作?在这个简单的示例中,我显然知道 table 不适合并且可以将 SplitRows
设置为 true,但在更复杂的示例中,数据是动态的并且 table 的大小或者 table 将继续的页面是未知的(或不容易知道的),我怎样才能让 table 表现得像这样?
这已被 iText 团队确定为错误,将在即将发布的版本中修复。