[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