【问题标题】:Numbered Paragraphs with Multiple Levels in ReportlabReportlab中具有多个级别的编号段落
【发布时间】:2014-04-16 05:48:08
【问题描述】:

我想在 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. Level 2 Header(
  2. Level 1 Header (

而不是这样的:

  1. 1 级标题

    1.1 2 级标题

  2. 2 级标题

有人知道如何实现吗?提前非常感谢!

编辑: 随着@Snoozer 的评论,现在是:

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

...这仍然不正确。我找不到任何具有维持一级索引的价值的东西。

【问题讨论】:

标签: reportlab paragraph


【解决方案1】:

编辑:我现在认为您尝试做的事情是不可能的,但我有几个建议

如果您不关心精确的#.# 格式,您可以使用多个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 页在这里很有帮助。我尝试使用&lt;name\&gt; 标签存储当前上层的值,但在使用 1 次后,似乎无法重新分配 &lt;name\&gt; 标签。我考虑过在 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 的更多信息

【讨论】:

  • 即使有 id,标题索引仍然不正确。我无法在此处显示正确的格式,因此请参阅上面的修改。
猜你喜欢
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
相关资源
最近更新 更多