3

我正在使用 ItextSharp 创建一个包含多个 PdfPTables 的 PDF 文档。我使用列表对多个 PdfPTables 进行分组,该列表在函数中创建并作为列表返回。然后我获取列表并循环遍历它以将每个 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);
            }
4

2 回答 2

3

除非您使用绝对值,否则在渲染之前无法知道表格的高度。虽然一开始令人沮丧,但一旦你开始思考它就会开始有意义。此外,表格可以嵌套在其他事物中,这就是为什么您还需要使用固定宽度而不是相对宽度的原​​因。

知道您可以使用这篇文章中的辅助方法来计算表格的高度,假设您之前已经固定了表格的列宽。此代码创建一个快速的临时内存文档,将表格呈现给它,然后返回表格的呈现高度。

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;
            }
        }
    }
}
于 2015-10-15T12:53:40.813 回答
1

我可以在不添加文档的情况下获得表格的高度,如果将表格包装在单元格中,那么您可以使用GetMaxHeight()

foreach (PdfPTable table in list)
{
    var tableHeight = new PdfPCell(table).GetMaxHeight();
}
于 2017-06-22T08:15:00.230 回答