【问题标题】:How do I know when to add a new page?我如何知道何时添加新页面?
【发布时间】:2020-09-25 13:43:35
【问题描述】:

所以我根据从数据库中获取的一些数据生成带有单元格的表格。

我的问题很简单,我怎么知道什么时候创建一个新页面?我必须计算每个表的高度并确保它们在页面大小范围内,如果下一个表不在,那么创建一个新页面并将其添加到该页面。

问题是我不确定这是否是正确的方法。你会这样做吗?如果是这样,我该如何计算表格的高度,因为myTable.GetHeight().GetValue(); 会抛出空引用异常,因为GetHeight() 返回空值。

【问题讨论】:

    标签: itext itext7


    【解决方案1】:

    首先,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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      相关资源
      最近更新 更多