Reportlab中具有多个级别的编号段落

时间:2014-04-16 05:48:09

标签: reportlab paragraph

我想在ReportLab中创建一个包含多个级别的编号列表。我几乎到处都看了,我只能找到标签来建立一个编号列表。但是,当我编写以下代码时,我的列表如下所示:

   contents.add(Paragraph("<seq/>. Level 1 Header", h1))
   contents.add(Paragraph("<seq/>. Level 2 Header", h2))    
   contents.add(Paragraph("<seq/>. Level 1 Header", h1))
  
      
  1. 1级标题   
        
    1. 2级标题(&lt;那1实际上是2 ... stackoverflow没有显示我正在写的内容)
    2.   
  2.   
  3. 1级标题(&lt; 2实际上是3)
  4.   

而不是像这样:

  
      
  1. 1级标题

         

    1.1 Level 2 Header

  2.   
  3. 2级标题
  4.   

有谁知道如何实现这一目标?非常感谢提前!

编辑: 有了@ Snoozer的评论,现在就是:

1. Level 1 Header
  2.1 Level 2 Header
3. Level 1 Header

......这仍然是不正确的。我无法找到任何有价值的东西来维持第一级指数。

1 个答案:

答案 0 :(得分:0)

编辑:我现在相信你想做的事情是不可能的,但我有几点建议

如果您不关心精确的#.#格式,则可以使用多个seq标记来完成此操作。要轻松使用多个seq代码,请从seqOrder开始。这有一个很好的属性,每当你使用更高级别的seq标签时,较低级别重置。为了使您的关卡看起来与众不同,我建议对每个关卡进行不同的格式化。

contents.add(Paragraph( ('<seqChain order="lev1 lev2"/>'
                         '<seqFormat id="lev1" value="1">'
                         '<seqFormat id="lev2" value="a">'
                         '<seq id="levelOne"/>. Level 1 Header'), h1))
contents.add(Paragraph('<seq id="levelTwo"/> Level 2 Header', h2))    
contents.add(Paragraph('<seq id="levelOne"/>. Level 1 Header', h1))
#We didn't have to reset the level 2 tag because chain takes care of it
contents.add(Paragraph('<seq id="levelTwo"/> Level 2 Header', h2))  

我发现ReportLab's RML userguide的第47页在这里很有帮助。我尝试使用<name\>标记存储当前较高级别的值,但在1次使用后,似乎无法重新分配<name\>标记。我想过在python中跟踪这个的其他程序化方法,但此时你自己就是在编写这个列表了。一个例子是

level1 = 1
contents.add(Paragraph('{0}. Level 1 Header'.format(level1), h1))
level2 = 1 
contents.add(Paragraph('{0}.{1} Level 2 Header'.format(level1,level2), h2))
#Now we have to automatically increment level1
level1 += 1    
contents.add(Paragraph('{0}. Level 1 Header'.format(level1), h1))
#and manually reset level 2
level2 = 1
contents.add(Paragraph('{0}.{1} Level 2 Header'.format(level1,level2), h2))

虽然您可以定义一个为您附加段落并手动迭代/重置适当级别值的函数。

我不确定你是否在python中这样做 - 我知道RML是reportlab的商业版本的一部分,我从来没有通过添加RML标签来构建文档。但是,如果您正在使用python,则可能需要查看使用Flowables构建文档,并且有ListFlowable来创建这些类型的列表。您仍然无法使用所需格式创建带有标签的列表,因为ListFlowable仅仅是这些RML标记的接口。您可以在第86页的ReportLab User Guide

中详细了解Flowables