itext 7-如何配置表拆分

itext 7-如何配置表拆分,itext,itext7,Itext,Itext7,我对使用itext 7呈现的表有几个问题。我使用itext 7.0.2.2(C#edition) 首先,当表格开始时接近页面底部,页面只有页眉空间时,itext 7在第一页呈现页眉,页眉后立即分页符。如何强制将标题和第一行保持在一起? 下一个问题是itext 7拆分行,而不是将整行移动到下一页。我知道itext 5有一个setSplitLate(bool)方法,可以配置itext是否拆分行,但如何处理itext 7呢?查看行发生的情况: 请注意,行可以为空,并且应该具有最小高度,所以对单元格内

我对使用itext 7呈现的表有几个问题。我使用itext 7.0.2.2(C#edition)

首先,当表格开始时接近页面底部,页面只有页眉空间时,itext 7在第一页呈现页眉,页眉后立即分页符。如何强制将标题和第一行保持在一起?

下一个问题是itext 7拆分行,而不是将整行移动到下一页。我知道itext 5有一个setSplitLate(bool)方法,可以配置itext是否拆分行,但如何处理itext 7呢?查看行发生的情况: 请注意,行可以为空,并且应该具有最小高度,所以对单元格内容设置keeptogether(true)不是解决方案。我这样添加单元格:

table.AddCell(new Cell().SetMinHeight(MIN_HEIGHT).Add("foo"));
更新: 这是一个行拆分的程序(C#):

结果:
设置表格标题单元格<代码>tbl.addHeaderCell(新单元格().add(“head txt”) 这将迫使标题在新的页面中重复我的经历。
然后,只需像普通一样在列的单元格中添加内容。

设置表格标题单元格<代码>tbl.addHeaderCell(新单元格().add(“head txt”) 这将迫使标题在新的页面中重复我的经历。
然后在单元格中为列添加内容,就像普通一样。

Hmm,为什么
setKeepTogether(true)
不是一个解决方案?标题问题确实是iText7中需要改进的地方。作为一种解决方法,您可以在有问题的表之前添加一个
AreaBreak
。但这当然不是一个通用的解决方案。事实上,
setKeepTogether(true)
应该可以在单元格上工作,并且有很多测试。如果需要,您可以自己检查(
TableTest#simpletablettest11
)。但是,您没有发布代码,因此无法猜测问题出在哪一侧。要检查当前可用空间,可以使用
doc.getRenderer().getCurrentArea().getBBox()这确实是一个最小高度和更紧密结合的边缘案例错误。已在Java
7.0.3.-SNAPSHOT
中修复。将需要一段时间才能移植到C#。嗯,为什么
setKeepTogether(true)
不是一个解决方案?头问题确实是iText7中需要改进的地方。作为一种解决方法,您可以在有问题的表之前添加一个
AreaBreak
。但这当然不是一个通用的解决方案。事实上,
setKeepTogether(true)
应该可以在单元格上工作,并且有很多测试。如果需要,您可以自己检查(
TableTest#simpletablettest11
)。但是,您没有发布代码,因此无法猜测问题出在哪一侧。要检查当前可用空间,可以使用
doc.getRenderer().getCurrentArea().getBBox()这确实是一个最小高度和更紧密结合的边缘案例错误。已在Java
7.0.3.-SNAPSHOT
中修复。将需要一段时间才能移植到C#。
var writer = new PdfWriter(new FileStream("...", FileMode.Create));
var pdfDoc = new PdfDocument(writer);
using (var document = new Document(pdfDoc, PageSize.A4))
{
    var table = new iText.Layout.Element.Table(UnitValue.CreatePercentArray(new[] { 1.3f, 1f, 1f, 1f, 1f, 1f, 1f }))
                .SetWidthPercent(100f)
                .SetFixedLayout();
    foreach (var i in Enumerable.Range(1, 7 * 100)) // 100 rows
    {
        var cell = new Cell().SetKeepTogether(true).SetMinHeight(45).Add(i.ToString());
        table.AddCell(cell);
    }
    document.Add(table);
}