我想在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级标题(&lt;那1实际上是2 ... stackoverflow没有显示我正在写的内容)
- 1级标题(&lt; 2实际上是3)
醇>
而不是像这样:
1级标题
1.1 Level 2 Header
- 2级标题
醇>
有谁知道如何实现这一目标?非常感谢提前!
编辑: 有了@ Snoozer的评论,现在就是:
1. Level 1 Header
2.1 Level 2 Header
3. Level 1 Header
......这仍然是不正确的。我无法找到任何有价值的东西来维持第一级指数。
答案 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