2015-10-14 98 views
3

我正在使用ItextSharp創建一個包含多個PdfPTable的PDF文檔。我使用列表對多個PdfPTable進行分組,並且該列表在函數中創建並作爲列表返回。然後我列出並循環遍歷它以將每個PdfPTable添加到文檔中。使用ItextSharp PdfPTable,table.TotalHeight返回0.0,但期望浮動值爲正

如果列表中下一個PdfPTable大於文檔上剩餘空間,我想添加一個新頁面。

使用斷點,我注意到「table.TotalHeight」總是返回0,當我期望它返回一個正浮點值。我可能會誤解桌子的方式.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); 
      } 
+3

參見[長的帖子在這裏(HTTP://計算器.com/a/7601244/231316)中有關計算表格高度的方法。 –

+0

有意義的是,表格需要在可以計算高度之前進行渲染。謝謝你的幫助。您的CalculatePdfPTableHeight()函數非常有用。發佈該代碼作爲您的互聯網點的答案! –

回答

3

除非您使用絕對值,否則表格的高度在渲染之前無法知道。儘管起初令人沮喪,但一旦開始思考它就開始有意義了。此外,表可以嵌套在其他東西,這就是爲什麼你也需要使用固定的寬度,而不是相對的。

知道您可以使用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; 
      } 
     } 
    } 
} 
1

我能得到表的高度,而不會在文件中添加,如果包裹在單元格中的表,那麼你可以使用GetMaxHeight()

foreach (PdfPTable table in list) 
{ 
    var tableHeight = new PdfPCell(table).GetMaxHeight(); 
}