我想在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标题
- 2级标题(<1实际上是2…stackoverflow没有显示我在写什么)
- 级别1页眉(<2实际上是3)
而不是像这样的东西:
一级标题
1.1 2级标题
- 级别2标题
有人知道如何做到这一点吗?提前感谢!
编辑:随着@Snoozer的评论,现在是:
1. Level 1 Header
2.1 Level 2 Header
3. Level 1 Header
这仍然是不正确的。我找不到任何能保持第一级索引值的东西。
编辑:我现在相信你想要做的是不可能的,但我有几个建议
如果您不关心精确的#.#
格式,可以通过使用多个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的RML用户指南第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用户指南中了解有关Flowables
的更多信息