使用 ItextSharp PdfPTable,table.TotalHeight returns 0.0,但期望正浮点值
Using ItextSharp PdfPTable, table.TotalHeight returns 0.0, but expecting a positive float value
我正在使用 ItextSharp 创建包含多个 PdfPTable 的 PDF 文档。我使用列表对多个 PdfPTables 进行分组,该列表在函数中创建并 returned 作为列表。然后我获取列表并循环遍历它以将每个 PdfPTable 添加到文档中。
如果列表中的下一个 PdfPTable 大于文档中剩余的 space,我想添加一个新页面。
使用断点,我注意到 "table.TotalHeight" 总是 returns 0,而我希望它 return 是一个正浮点值。我可能误解了 table.TotalHeight 的工作方式,但据我了解,它应该 return 个人的总身高 table。
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);
}
除非您使用绝对值,否则 table 的高度只有在渲染后才能知道。虽然一开始令人沮丧,但一旦您开始考虑它,它就会变得有意义。此外,tables 可以嵌套在其他内容中,这就是为什么您还需要使用固定宽度而不是相对宽度的原因。
知道您可以使用 this post 中的辅助方法来计算 table 的高度,前提是您之前已经固定了 table 的列宽。此代码创建一个快速的临时内存文档,向其呈现 table,然后 returns table 的呈现高度。
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;
}
}
}
}
我可以在不添加文档的情况下获得table的高度,如果将table包裹在单元格中,那么您可以使用GetMaxHeight()
foreach (PdfPTable table in list)
{
var tableHeight = new PdfPCell(table).GetMaxHeight();
}
我正在使用 ItextSharp 创建包含多个 PdfPTable 的 PDF 文档。我使用列表对多个 PdfPTables 进行分组,该列表在函数中创建并 returned 作为列表。然后我获取列表并循环遍历它以将每个 PdfPTable 添加到文档中。
如果列表中的下一个 PdfPTable 大于文档中剩余的 space,我想添加一个新页面。
使用断点,我注意到 "table.TotalHeight" 总是 returns 0,而我希望它 return 是一个正浮点值。我可能误解了 table.TotalHeight 的工作方式,但据我了解,它应该 return 个人的总身高 table。
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);
}
除非您使用绝对值,否则 table 的高度只有在渲染后才能知道。虽然一开始令人沮丧,但一旦您开始考虑它,它就会变得有意义。此外,tables 可以嵌套在其他内容中,这就是为什么您还需要使用固定宽度而不是相对宽度的原因。
知道您可以使用 this post 中的辅助方法来计算 table 的高度,前提是您之前已经固定了 table 的列宽。此代码创建一个快速的临时内存文档,向其呈现 table,然后 returns table 的呈现高度。
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;
}
}
}
}
我可以在不添加文档的情况下获得table的高度,如果将table包裹在单元格中,那么您可以使用GetMaxHeight()
foreach (PdfPTable table in list)
{
var tableHeight = new PdfPCell(table).GetMaxHeight();
}