[reportlab-users] TOC and page x of y canvas

Robin Becker robin at reportlab.com
Wed Nov 11 07:01:49 EST 2015

On 09/11/2015 20:35, brian wrote:
> Does anyone know the answer to this question:
> http://stackoverflow.com/questions/16041397/python-reportlab-clickable-toc-with-x-of-y-page-numbering
> I'm doing a similar thing and when I create the TOC with a numbered canvas the
> links don't work.  If I remove the numbered canvas, the links work.  I'd like to
> not have to roll my own TOC solution.
> Brian

Perhaps you could post some code, and please not like the link above which 
doesn't work without considerable editing and guessing. The attempt is being 
made there to defer page building until the end which is a bit daft.

Do not use the numbered canvas it is wholly problematic/idiotic. It might be 
possible to defer all page writing until the very end, but Canvas and everything 
else wasn't written with that intention so it's almost certainly not a good idea.

Anyhoo if I do make the code work as intended the links are clickable, but I 
still don't like the idea of using the NumberedCanvas.

So far as I can understand it there is/are two possible reasons to use the 
NumberedCanvas. We need to find the total number of pages and possibly we need 
to avoid having multiple passes.

Well if we don't know the number of Toc entries up front we cannot avoid 
multiple passes because of a variable number of TOC pages. If we know the TOC 
will fit on n pages then it is possible to do both TOC & page x of y with one 
pass. So 1) we assume a for "y" the total number of pages and 2) we assume 
form(s) for the whole TOC.

If that solution won't do then you are probably back to doing multi-build anyway 
and that easily allows for variable length TOC and for collection of the number 
of pages at the end of the story. Three passes will suffice.
Robin Becker

More information about the reportlab-users mailing list