[reportlab-users] Reverse order of pages

Andy Robinson andy at reportlab.com
Wed Jun 28 12:29:10 EDT 2006

> Am I right in thinking that somewhere in the bowels of
> reportlab there is some routine that works on a list
> of pages to convert the data to a pdf stream? If there
> is, I could find that list, reverse it, and let
> reportlab do its stuff from that point on.
I was about to explain that it's not that simple, then tried it, and it 
is pretty easy!  Look at the save method of 
reportlab.pdfgen.canvas.Canvas, and add a line as I did below:

     def save(self):
         """Saves and close the PDF document in the file.
            If there is current data a ShowPage is executed automatically.
            After this operation the canvas must not be used further."""
         if len(self._code): self.showPage()
         self._doc.Pages.pages.reverse()    #  REVERSE HERE
         self._doc.SaveToFile(self._filename, self)

This seems to do the right thing.

If you are using the Canvas you can subclass it.  If using Platypus,
it's best again to subclass the Canvas and pass in your new class
as an argument to BaseDocTemplate.build; there is a keyword argument for it.

I am not sure it's worth adding a 'reverse' feature just now, as more 
generally the feature people need when printing is to do arbitrary
permutations (e.g. 1,2,3,4  ->  2,3,1,4) and also arrangements of pages 
onto one larger page.  But hopefully this will get you there.

- Andy

More information about the reportlab-users mailing list