如何对齐跨越多个页面的 PdfPCell 底部?

How to align bottom a PdfPCell spaning across more than one page?

我使用的是 iTextSharp 版本 4.1.6.16。我有一个包含两列(1 行)的 PdfPTable

右侧单元格内容较多,跨页到下一页。

在左边的单元格中,我只想在底部放一些小的 PdfPTable。为此,我在最顶部 table 的左侧单元格中使用 cell.VerticalAlignment = Element.ALIGN_BOTTOM;。如果行不大于一页,此方法效果很好。

如果行到达下一页,则左侧单元格的内容确实与底部对齐,但第一页的底部。所以右边单元格的内容仍然在下一页继续,但左边单元格那里是空的(我测试了它也跨越下一页的背景颜色)。

我尝试在内部 table 上设置 KeepTogether,但它没有任何效果。我也考虑过用 CellEvent 来做,但到目前为止我找不到如何在单元格中绝对定位 IElement (不仅是 Image 或文本)。

内容与单元格占据的第一页底部对齐是错误还是设计行为?是否有解决方法或更好的方法将内容放在单元格底部,无论它在哪里结束?

我终于通过以下解决方法解决了这个问题。

我创建了一个 CellEvent 获取 PdfPTable 并向上移动它的内容:

class BottomFix : IPdfPCellEvent
{
    private readonly PdfPTable _content;

    public BottomFix(PdfPTable content)
    {
        _content = content;
    }

    public void CellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)
    {
        _content?.WriteSelectedRows(0, -1, position.Left, position.Top + _content.TotalHeight, canvases[PdfPTable.BACKGROUNDCANVAS]);
    }
}

然后在我原来的两行 table 中添加了第二行,并在那里添加了一个高度等于 0 的单元格,我没有将内容放入其中,而是使用了这个 CellEvent。原来的左边单元格是空的,所以下一行的内容被推到它上面,看起来就像原来在那里一样。我在 table 中没有边框,所以它们不是问题,但也可以通过将此 1px 单元格的边框设置为 none.

来解决
var cell = new PdfPCell();
var table = new PdfPTable(1) { /* some content etc... */ };
cell.FixedHeight = 0;
cell.CellEvent = new BottomFix(table);
// such prepared cell goes to top level table, second row, left column