Itext 如何在多页上对齐PdfPCell的底部?
我使用的是iTextSharp版本4.1.6.16。我有一个带有两列(1行)的Itext 如何在多页上对齐PdfPCell的底部?,itext,Itext,我使用的是iTextSharp版本4.1.6.16。我有一个带有两列(1行)的PdfPTable 右边的单元格中有很多内容,所以它跨越整个页面并到达下一页 在左边的单元格中,我只想在底部放置一些小的PdfPTable。为此,我使用cell.VerticalAlignment=Element.ALIGN\u BOTTOM位于最顶部表格的左侧单元格中。如果行不大于一页,则此操作效果良好 如果行到达下一页,则左侧单元格的内容确实与第一页底部对齐,但与第一页底部对齐。因此,右侧单元格的内容仍在下一页上继
PdfPTable
右边的单元格中有很多内容,所以它跨越整个页面并到达下一页
在左边的单元格中,我只想在底部放置一些小的PdfPTable
。为此,我使用cell.VerticalAlignment=Element.ALIGN\u BOTTOM代码>位于最顶部表格的左侧单元格中。如果行不大于一页,则此操作效果良好
如果行到达下一页,则左侧单元格的内容确实与第一页底部对齐,但与第一页底部对齐。因此,右侧单元格的内容仍在下一页上继续,但左侧单元格在那里是空的(我用背景色测试,它也跨越到下一页)
我尝试在内表上设置KeepTogether
,但没有任何效果。我也考虑过用CellEvent
来做这件事,但到目前为止我还找不到如何在单元格中绝对定位IElement
(不仅仅是图像或文本)
内容与单元格占据的第一页底部对齐是错误还是设计行为?是否有一种变通方法或更好的方法将内容放在单元格的底部,无论其结束在哪里?我最终通过以下变通方法解决了问题
我创建了一个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]);
}
}
然后,我在原来的两行表中添加了第二行,并在其中添加了一个高度等于0的单元格,其中我使用了这个CellEvent
,而不是将内容放入其中。原来的左侧单元格保留为空,因此下一行的内容被推送到该单元格上,看起来与原来一样。此表中没有边框,所以它们不是问题,但也可以通过将此1px单元格的边框设置为“无”来解决
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