如何解决我怎么知道何时添加新页面?
因此,我要根据从数据库中获取的一些数据来生成带有单元格的表。
我的问题很简单,我如何知道何时创建新页面?我将必须计算每个表格的高度,并确保它们在页面的尺寸之内,如果下一张表格不在,那么创建一个新页面并将其添加到该页面中。
问题是我不确定这是否是正确的方法。这是你会怎么做的吗?如果是这样,由于myTable.GetHeight().GetValue();
返回空值,因此GetHeight()
会引发空引用异常,因此我该如何计算表格的高度。
解决方法
首先table.GetHeight().GetValue()
返回null,因为您%99没有设置桌子的高度。
例如:
var table1 = new Table(1);
var height1 = table1.GetHeight().GetValue(); // This throws exception because we are not setting the height in here.
var table2 = new Table(1).SetHeight(20);
var height2 = table2.GetHeight().GetValue(); // This line returns 20,because you have set the value of height
对于您的主要问题,
您可以使用以下代码获取默认页面大小,并设置表格的高度
var defaultPageHeight = pdfDocument.GetDefaultPageSize().GetHeight();
var table = new Table(1).UseAllAvailableWidth().SetHeight(defaultPageHeight);
但这不是一个好的方法,我认为一个好的方法是使用TableRenderer
小例子:
public class CustomTableRenderer : TableRenderer
{
protected Document document;
public class CustomTableRenderer(Table modelElement,Document document) : base(modelElement)
{
this.document = document;
}
public override IRenderer GetNextRenderer()
{
// Add a header everytime a new page is created with this renderer
var header = new Table(1).UseAllAvailableWidth();
header.AddCell(new Cell().Add(new Paragraph("Title")));
document.Add(header);
return new CustomTableRenderer((Table)GetModelElement())
}
public override void Draw(DrawContext drawContext)
{
// This is the part where you create your layout for every time this renderer calls.
var defaultPageHeight = drawContext.GetDocument().GetDefaultPageSize().GetHeight();
// And you can do other things
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。