首页> C#>使用ItextSharp的PdfPTable,table.TotalHeight返回0.0,但期望一个正浮点值

我正在使用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;
            }
        }
    }
}
上一篇:c#-使用iTextSharp库提取包含在pdf文件中的签名的图像


下一篇:a4纸尺寸是多少厘米