[reportlab-users] Keeping rows of a table together?

Erik Westra reportlab-users@reportlab.com
Mon, 16 Jun 2003 08:21:19 +1200


Hi there,

I suspect the answer to this question is "it can't be done", but I thought 
I'd ask anyway...

I'm using a platypus.Table object to represent a list of job details for 
courier deliveries, where each delivery takes up two rows in the table, and 
a horizontal line drawn between each individual job, like this:

    Date&Time   Pickup                  Dropoff
    ---------   --------------------    --------------------
    27/3/2003   AMI Limited             CDHQ
    8:19 AM     126 Pickworth Street    66 Starbuck Drive
    ---------   --------------------    --------------------
    27/3/2003   Residence               AMI Limited
    10:04 AM    902 Buckland Rd         126 Pickworth Street
    ---------   --------------------    --------------------

There can be hundreds of these in a single table (they need to be a single 
table so that all the columns line up), and I'm using a platypus.Table so 
that the table nicely breaks across page boundaries, and automatically 
redisplays the header cells at the top of each page.

Now, the problem is that when Flowable.split() is called to break the table 
across page boundaries, the three rows that make up each delivery often 
appear on separate pages, which is rather ugly.

So, my question is: is there any way of adding something like a "keep with 
previous row" style to a platypus.Table so that the page breaks occur at a 
reasonable point?  I see that there's a KeepTogether object that forces 
individual Flowable objects to stay on a single line, but that doesn't help 
in this case as I need to keep certain rows of a table together.

Any ideas?  Could I, perhaps, create a subclass of platypus.Table and 
override the split() method in some way?

Thanks,

  - Erik.