如何让reportlab包中的缩进列表项前的项目符号直接显示在文本旁边?

6 投票
2 回答
3643 浏览
提问于 2025-04-17 16:36

我正在使用reportlab 2.6的ListFlowable来制作一个带有彩色圆点的项目符号列表。不过,我希望项目符号能出现在文本旁边,而不是和前面的、没有缩进的文本对齐。我试着查看ListFlowable的源代码,但没找到太多有用的信息。以下是我的代码:

from reportlab.platypus import Paragraph, ListFlowable, ListItem, SimpleDocTemplate, Frame
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.colors import CMYKColor

doc = SimpleDocTemplate("SOtest.pdf")
styles = getSampleStyleSheet()
Story = []
Story.append(Paragraph("Header Text, I dont want the bullets directly below the H"
                       ,styles['Normal']))
my_list = ListFlowable(
    [
        ListItem(Paragraph("Line 1",styles['Normal'])
                 ,bulletColor = CMYKColor(0.81, 0.45, 0.53, 0.23)
                 ,value = 'circle'
                 ),
        ListItem(Paragraph("Line 2",styles['Normal'])
                 ,bulletColor = CMYKColor(0.81, 0.45, 0.53, 0.23)
                 ,value = 'circle'
                 )
        ],
    bulletType='bullet',
    start='circle'
    )

Story.append(my_list)
doc.build(Story)

这段代码的效果是这样的:

Not Desired

但我想要的效果是这样的:

Desired

我手动编辑了第二张图片,以达到我想要的效果。

我考虑过在一个列表里面再做一个列表,这样可以得到一个缩进的项目符号,但我不知道怎么把文本靠近项目符号再缩进。

2 个回答

3

我进一步研究了一下这个问题(关于ReportLab的源代码……),想弄清楚如何处理项目符号没有正确对齐的问题。我建议给那些对项目符号列表有点强迫症的人添加以下几个kwargs

  • bulletOffsetY:正值可以把项目符号向上移动,负值则向下移动
  • bulletFontSize:如果你默认的项目符号太大了,可以用这个来调整
  • spaceBeforespaceAfter:用来控制列表项之间的上下间距
6

只需要在ListItem里加一个leftIndent参数就可以了。

my_list = ListFlowable([
    ListItem(Paragraph("Line 1", styles['Normal']),
         leftIndent=35, value='circle',
         bulletColor=CMYKColor(0.81, 0.45, 0.53, 0.23)
    ),
    ListItem(Paragraph("Line 2", styles['Normal']),
         leftIndent=35, value='circle',
         bulletColor=CMYKColor(0.81, 0.45, 0.53, 0.23))
],
bulletType='bullet',
start='circle',
leftIndent=10
)

补充: 你还需要设置ListFlowableleftIndent,这样才能定义子弹点和文本之间的间距。

撰写回答