scanny / python-pptx

Create Open XML PowerPoint documents in Python
MIT License
2.35k stars 510 forks source link

Add Bullet list on existing slides doesn't works #807

Open FPRM opened 2 years ago

FPRM commented 2 years ago

Python == 3.7 python-pptx==0.6.21

I try to create a simple bullet list in an existing presentation template on an existing slide. by Following the exemple on the read the doc page everything works but the example requires to create a new slide. i want to add my bullet list on as specific space in a specific place, and it doesn't work.

My code is as following

from pptx import Presentation
from pptx.util import Cm , Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN

# list of bulleted element
paragraph_strs = [
    'test item1',
    'test item2',
    'test item3'
]
# Open Templatetes and position on slide 2
prs = Presentation('emptytest.pptx')
docslide = prs.slides[1]

# create text box according to template needed
txBox = docslide.shapes.add_textbox(Cm(2), Cm(2), Cm(17.15), Cm(5))
tf = txBox.text_frame
# iterate bullet list and add text as paragraph
for para_str in paragraph_strs:
    p = tf.add_paragraph()
    p.text = para_str
    p.alignment = PP_ALIGN.LEFT
    font = p.font
    font.name = 'Ubuntu'
    font.size = Pt(12)
    p.font.color.rgb = RGBColor(140, 140, 140)
    p.level = 1

prs.save('testoutput.pptx')

And the result is https://i.imgur.com/IfgmfHz.png as my desired output should look like. https://i.imgur.com/Hi5bGpm.png And if i may ask a nice to have question, would be to have bullets formated in dedicated color like https://imgur.com/UrrsBu8

Thanks a lot

cltj commented 2 years ago

I am wondering about the same thing as @FPRM Did not find anything in the documentation about this, but I am sure there is a way. Can anyone help?

NovoLearn commented 5 months ago

I'm wondering it is related to prs.slides[1] not using a slide layout (slide master slide) that contains a placeholder text box. If the placeholder text box is fomratted to use bullet points, then that might be the way to go.

To see what I mean, have a look at https://python-pptx.readthedocs.io/en/latest/user/quickstart.html#bullet-slide-example

If you undertake that that example, then open the created test.pptx file:

Not sure if that helps (or if you even care anymore 18 months on), but thought I'd share in case it does :)