[reportlab-users] Problem with row&column spanning code not calculating table heights

David Fraser reportlab-users@reportlab.com
Thu, 16 Oct 2003 16:10:58 +0200


Robin Becker wrote:

>In article <PGECLPOBGNBNKHNAGIJHIENEFJAA.andy@reportlab.com>, Andy
>Robinson <andy@reportlab.com> writes
>  
>
>>>Hi
>>>
>>>In reportlab 1.18 we have a problem where the last row of a table has no 
>>>height - the text appears, but the boxes are all squashed (see the 
>>>screenshots below for comparison).
>>>We have tracked this down to some code in platypus/tables.py where the 
>>>code says to ignore a cell for calculating row height if the cell is 
>>>part of a span.
>>>Taking out this code fixes our problem (see the attached patch)
>>>We have had some related problems with row and column spanning; can 
>>>anyone comment on this?
>>>      
>>>
>>I guess what we should say is,
>> "ignore cell for row height if part of a span AND IT SPANS MORE 
>>  THAN ONE ROW"
>>
>>And the corollary is to ignore cells when calculating width ig
>>they span more than one column.
>>    
>>
>....
>gurk. I believe it's more complicated
>
>Suppose we have two rows and two columns
>
>11 12
>21 22
>
>If say the second column is actually a cell that spans two rows the
>implication is that
>
>row1.height >= c11 = max(cell11.height,0)
>row2.height >= c21 = max(cell21.height,0)
>row1.height+row2.height >= c1222 = max(cell12&22.height,0)
>
>We can solve this as a linear program variables being row1.height,
>row2.height. The utility would normally be the total height ie
>row1.heigth+row2.height which we attempt to minimize. In this simple
>case there are only a few ways that the constraints can be binding.
>In particular we know the optimal cost
>
>U = max(c11+c21,c1222)
>
>but if that is not c11+c21 then we still don't get the optimal row
>heights as they are not bound at the solution. So if
>
>if c11+c21<c1222:
>    if c11+c21>0: 
>      choose heights c11*U/(c11+c21), U-c11*U/(c11+c21)
>    else:
>      choose heights 0, U
>else:
>    choose heights c11, c21
>
>Of course this is about the simplest possible row spanning problem. In a
>more general problem with multiple overlapping spans we can still solve
>the LP formulation to get the required minimum required overall heights.
>I'm not sure if there's a simple general formulation that is easy to
>solve.
>  
>
I wonder if it would be helpful, when dealing with something that spans 
rows & columns, to consider area as the variable in the linear programming.

Just a thought
David