Выровнять текст по центру с помощью Python-pptx

Короче вопрос: можно ли выровнять текст по центру в Python-pptx?

Так как я использую Python-pptx, я смог автоматизировать довольно много вещей, и мне очень нравится его использовать! Однако я столкнулся с проблемой. Я пытаюсь центрировать текст по горизонтали на слайде. Если ты меня не понимаешь:

Видите, как первые два абзаца отличаются от двух других

Мой текст теперь выровнен по левому краю, аналогично тексту в первых двух абзацах. Тем не менее, я бы хотел, чтобы они были выровнены по центру, как в последних двух абзацах Это фрагмент моего кода:

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)

Я посмотрел в документации, но не смог найти ничего полезного. Я прочитал кое-что о "MSO_VERTICAL_ANCHOR" и "PP_PARAGRAPH_ALIGNMENT", но я просто не могу заставить его работать.

Заранее спасибо!

3 ответа

Решение
from pptx.enum.text import PP_ALIGN

shape.paragraphs[0].alignment = PP_ALIGN.CENTER

Это взято непосредственно из документов Python pptx. Это не работает для вас? Вы сказали в своем вопросе, что вы слышали о PP_PARAGRAPH_ALIGNMENT но не могу заставить его работать. Какие проблемы возникают?

Вы можете просмотреть более подробную информацию о выравнивании Python Python здесь.

Сканни, который прокомментировал ниже меня, добавил замечательный момент, который решит вашу проблему:

Выравнивание абзаца (также известное как обоснование) является свойством абзаца и должно применяться отдельно к каждому абзацу. В коде, который вы включили в свой вопрос, если вы добавите строку p.alignment = PP_ALIGN.CENTER Вы должны получить то, что вы ищете.

Основываясь на ответе @scanny и @Harrison, я получил следующий код, работающий с двумя методами:

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')

Мне помогло использование PP_PARAGRAPH_ALIGNMENT

      from pptx.enum.text import PP_PARAGRAPH_ALIGNMENT
shape.paragraphs[0].alignment = PP_PARAGRAPH_ALIGNMENT.CENTER

Имейте в виду, что вы можете переключаться между абзацами определенного text_frame, используя for:

      for paragraph in cell.text_frame.paragraphs:
                paragraph.font.color.rgb = RGBColor(255, 255, 255)
                paragraph.font.size = Pt(9)   
                paragraph.alignment = PP_PARAGRAPH_ALIGNMENT.CENTER
Другие вопросы по тегам