使用reportlab将图和表列表添加到目录

2024-06-16 10:29:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我是最新的reportlab和django,标准鸭嘴兽TOC带有“TOCEntry”的通知,对我的文档非常有用。在

我现在正试图在目录中再添加两个部分:“图表列表”和“表格列表”。由于文档中的流程图h1、h2、table、image等可以按任何顺序出现,我似乎无法将这两个列表与主目录分开。理想情况下,我想要的是:

Table of Content:

Heading1
  Sub1
  Sub2
Heading2
  Sub3
  Sub4
  Sub5

List of Figures:
  Figure1
  Figure2

List of Tables:
  Table1
  Table2

据我所知,“TOCEntry”是查找到的标记,使用afterflovable最终会将所有流放到与实际文档中所示相同的序列中。这不是我想要的。任何能让TOC看起来像上面描述的东西都会得到高度赞赏。在


Tags: ofdjango文档目录列表标准图表list
1条回答
网友
1楼 · 发布于 2024-06-16 10:29:10

我认为最简单的方法是将toc子类化,并在docTemplate中为它们添加可后继的捕捉器。在

class MyDocTemplate(BaseDocTemplate):  
     def __init__(self, filename, **kw):  
         self.allowSplitting = 0  
         apply(BaseDocTemplate.__init__, (self, filename), kw)  
         template = PageTemplate('normal', [Frame(1*inch, 1*inch, 6.5*inch, 9.5*inch, id='F1')])
         self.addPageTemplates(template)  

     def afterFlowable(self, flowable):  
         "Registers TOC entries."  
         if flowable.__class__.__name__ == 'Paragraph':  
             text = flowable.getPlainText()  
             style = flowable.style.name  

             if style == 'reportHeading1':
                 toc_el = [ 0, text, self.page ] # basic elements
                 toc_bm = getattr(flowable, '_bookmarkName', None) # bookmark for links
                 if toc_bm: 
                     toc_el.append( toc_bm )
                 self.notify('TOCEntry', tuple(toc_el) )

             elif style == 'reportHeading2':  
                 toc_el = [ 1, text, self.page ] # basic elements
                 toc_bm = getattr(flowable, '_bookmarkName', None) # bookmark for links
                 if toc_bm: 
                     toc_el.append( toc_bm )
                 self.notify('TOCEntry', tuple(toc_el) )

             elif style == 'TableTitleStyle':
                 toc_el = [ 1, text, self.page ] # basic elements
                 toc_bm = getattr(flowable, '_bookmarkName', None) # bookmark for links
                 if toc_bm: 
                     toc_el.append( toc_bm )
                 self.notify('TOCTable', tuple(toc_el) )

             elif style == 'GraphicTitleStyle':
                 toc_el = [ 1, text, self.page ] # basic elements
                 toc_bm = getattr(flowable, '_bookmarkName', None) # bookmark for links
                 if toc_bm: 
                     toc_el.append( toc_bm )
                 self.notify('TOCFigure', tuple(toc_el) )

图表的次要目录:

^{pr2}$

最后在单据生成过程中。我将在标准TOC之后添加ListOfTables和listofigures的实例,使它们看起来在实际pdf中有某种关联。在

相关问题 更多 >