How can I make the bullet appear directly next to the text of an indented list in the reportlab package for python?

早过忘川 提交于 2019-12-01 21:39:32

问题


I'm using reportlab 2.6's ListFlowable to make a bulleted list with colored circle bullets. However, I would like the bullet to appear next to the text, rather than aligned with the preceding, non-indented text. I tried to open up the ListFlowable source, but I couldn't find much there. Here's what I have:

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)

This code results in this:

But I want it to look like:

I manually edited the second image to get the desired effect.

I thought about making a list inside a list, to get an indented bullet, but then I wouldn't know how to dedent the text closer to the bullet.


回答1:


Just pass a leftIndent parameter into the ListItem.

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
)

EDIT: You have to set the leftIndent of the ListFlowable for defining the space between the bullets and the text.




回答2:


I ended up looking further into it (the ReportLab source code…) to discover how to deal with the bullets not being correctly-aligned vertically, either. I suggest the following additional kwargs for other bulleted-list control freaks:

  • bulletOffsetY +ve to move it up, -ve to move it down
  • bulletFontSize if you ended up with huge bullets by default like I did
  • spaceBefore and spaceAfter to control the vertical gaps between list items


来源:https://stackoverflow.com/questions/14996458/how-can-i-make-the-bullet-appear-directly-next-to-the-text-of-an-indented-list-i

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!