我正在使用ItextSharp创建具有多个PdfPTables的PDF文档.我使用一个列表对多个PdfPTable进行分组,并且该列表在函数中创建并作为列表返回.然后,我获取列表并遍历整个列表,以将每个PdfPTable添加到文档中.
如果列表中的下一个PdfPTable大于文档上的剩余空间,我想添加一个新页面.
使用断点,我注意到“ table.TotalHeight”总是返回0,而我希望它返回一个正浮点值.我可能会误解table.TotalHeight的工作方式,但据我了解,它应该返回单个表的总高度.
for (count1 = 0; count1 < testQuote.Count + 1; count1++)
{
var list = BuildDetail(testQuote, count1);
foreach (PdfPTable table in list)
{
if (table.TotalHeight > (writer.GetVerticalPosition(false) - doc.BottomMargin))
{
doc.Add(new Paragraph("Quote continues on next page"));
doc.NewPage();
}
doc.Add(new Paragraph(" "));
doc.Add(table);
}
解决方法:
除非使用绝对值,否则除非渲染表格,否则无法知道表格的高度.尽管起初令人沮丧,但是一旦您开始考虑它,它就会变得有意义.此外,表格可以嵌套在其他内容中,这就是为什么您还需要使用固定宽度而不是相对宽度的原因.
知道您可以使用this post的帮助方法来计算表格的高度,前提是您先前已固定表格的列宽.此代码创建一个快速的临时内存文档,将表呈现给它,然后返回表的呈现高度.
public static float CalculatePdfPTableHeight(PdfPTable table)
{
using (MemoryStream ms = new MemoryStream())
{
using (Document doc = new Document(PageSize.TABLOID))
{
using (PdfWriter w = PdfWriter.GetInstance(doc, ms))
{
doc.Open();
table.WriteSelectedRows(0, table.Rows.Count, 0, 0, w.DirectContent);
doc.Close();
return table.TotalHeight;
}
}
}
}