Question in short: Is it possible to align text to the center in Python-pptx?
Since I'm using Python-pptx, I have been able to automate quite a lot of things and I really enjoy using it! However, I've run into a problem. I'm trying to center my text horizontally on a slide. If you don't understand me:
My text is now aligned to the left, similar to the text in the first two paragraphs. However, I'd like them to be aligned to the center, like those last two paragraphs. This is a snippet of my code:
left = Cm(3)
top = Cm(2.5)
width = Cm(15)
height = Cm(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
p = tf.add_paragraph()
run = p.add_run()
run.text = "Just an example"
font = run.font
font.size = Pt(30)
I looked in the documentation, but couldn't find anything useful. I read something about "MSO_VERTICAL_ANCHOR" and "PP_PARAGRAPH_ALIGNMENT", but I just can't get it working.
Thank you in advance!
To center align a text in Python, we use the Python's string center() function. Python center() is a string class function that is used to position a string by padding it with a specified character.
The center() method will center align the string, using a specified character (space is default) as the fill character.
Select the text you want to modify. Select one of the four alignment options in the Paragraph group. Align Text Left: Aligns all of the selected text to the left margin. Center: Aligns text an equal distance from the left and right margins. Align Text Right: Aligns all of the selected text to the right margin.
from pptx.enum.text import PP_ALIGN
shape.paragraphs[0].alignment = PP_ALIGN.CENTER
This is taken directly from the Python pptx Docs. Does this not work for you? You said in your question that you've heard of PP_PARAGRAPH_ALIGNMENT
but can't get it working. What problems are arising?
You can view more information regarding Python pptx alignment here.
Scanny, who commented below me added a wonderful point that will solve your problem:
Paragraph alignment (also known as justification) is a property of a paragraph and must be applied individually to each paragraph. In the code you included in your question, if you add a line p.alignment = PP_ALIGN.CENTER
you should get what you're after.
Based on the answer by @scanny and @Harrison I got the following code working with the two methods:
from pptx import Presentation
from pptx.util import Inches, Pt,Cm
from pptx.enum.text import PP_ALIGN
prs = Presentation()
blank_slide_layout = prs.slide_layouts[6]
slide = prs.slides.add_slide(blank_slide_layout)
left = Cm(3)
top = Cm(2.5)
width = Cm(15)
height = Cm(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.text = "Hello"
txBox.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
p = tf.add_paragraph()
p.alignment = PP_ALIGN.CENTER
run = p.add_run()
run.text = "Just an example"
font = run.font
prs.save('test.pptx')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With