[reportlab-users] Pagenumbers and table of contents
    Sebastian Ware 
    sebastian at urbantalk.se
       
    Fri Oct 12 05:02:20 EDT 2007
    
    
  
How about creating a flowable, which doesn't render any visual  
artifacts, called...
   TocEntry(info, list_name)
...where info is a dictionary that can be accessed when creating the  
item in the rendered TOC (such as title, outline level). Name is the  
name of the TOC, so one could use it for several reference lists in  
the document. The TocEntry() is added wherever I want to be able to  
reference something.
When I have added all my TocEntry() items, I could access  
self.getTocEntries(list_name) and create my TOC...
   style = ...
   toc_story = []
   for entry in self.getTocEntries('toc'):
     toc_story.append( TocItem(entry.info['title'], entry, style,  
leftIndent= 0,  sep= ' ') )
Then I would have to insert the toc_story in the right place of my  
document story. The TocItem() renders with the specified style +  
leftIndent, followed by repeating sep and then a right justified  
pagenumber. Of course one could create ones own customised TocItem  
that renders differently, but this is flexible enough for most cases.
This will probably only require a single pass when rendering. The  
number of TocEntry items is known and each height too, then only the  
page numbers need to be added after the entire document has been  
rendered.
If we also add entry_name...
     TocEntry(info, list_name, entry_name= None)
...and the method self.getTocDictionaryItem(list_name, entry_name),  
we could reference a specific item. And if this is and maybe this  
would allow us to reference TocEntry() items that are created later  
in the document. Useful for inline references to tables etc.
This should probably not be too difficult to implement and maintain,  
yet it is dead easy to understand for a newbie like  myself.
Mvh Sebastian
11 okt 2007 kl. 22.11 skrev Andy Robinson:
> On 11/10/2007, Sebastian Ware <sebastian at urbantalk.se> wrote:
>> Hi!
>>
>> Can I use SimpleDocTemplate() to create a TOC? How would I specify
>> the toc-items and get the automatic page numbers?
>
> SimpleDocTemplate inherits from BaseDocTemplate so you can specialise
> it in the same way.  It just saves you defining your own frames when
> you only want one.
>>
>> I have seen test_platypus_toc.py but it requires me to specialise
>> BaseDocTemplate. Is this the only way?
>
> Regrettably there is no easy way to do these.  We still have to remind
> ourselves
> every time.
>
> If anyone can suggest a nicer API for creating indices and tables -
> how to specify what you want indexing - I'd consider implementing it.
> Right now it's a PITA.  Sorry!
>
>> I also read about something called namedString and getName, but
>> couldn't get it to work.
>> http://developer.reportlab.com/rsrc/rml_examples/ 
>> test_012_simpletoc.pdf
>
> Report Markup Language is our commercial software and works a bit
> differently; in markup-land it's easier to do a preprocessing pass
> than in Python.
>
> If you are using TinyRML or z3c.rml, you'd have to ask the
> implementers.  If you are working for one of our customers and using
> RML(tm), or want to discuss pricing for a real project, we'd be happy
> to talk offline (and could provide proper teaching examples).
>
> Best Regards,
>
> Andy Robinson
> _______________________________________________
> reportlab-users mailing list
> reportlab-users at reportlab.com
> http://two.pairlist.net/mailman/listinfo/reportlab-users
    
    
More information about the reportlab-users
mailing list