"Отправить на задний план" фигуру на PPT, используя python - PullRequest
0 голосов
/ 08 мая 2020

У меня есть сценарий, который добавляет текстовое поле с текстом в существующий PPT. Теперь цвет текстового поля сделан белым, чтобы перезаписать существующий текст, присутствующий в слайдмастере.

Проблема в том, что небольшая часть текстового поля перекрывается другой фигурой, которая должна быть сверху. Есть ли в python-pptx возможность отправить форму на задний план. Ниже приведен вариант, который можно использовать с помощью powerpoint enter image description here

Это способ, которым я могу это сделать, используя python-pptx

вот мой сценарий


for pptfile in addressList:
    prs = Presentation(pptfile)
    slides = prs.slides

    for i in range(2,len(slides)-1):
            textContent = ""
            slide = prs.slides[i]
            # Text position
            t_left = Inches(3.27)
            t_top = Inches(7.05)
            t_width = Inches(6.89)
            t_height = Inches(0.27)
            # Text
            txBox = slide.shapes.add_textbox(t_left, t_top, t_width, t_height)
            fill = txBox.fill
            fill.solid()
            fill.fore_color.rgb = RGBColor(255, 255, 255)

            tf = txBox.text_frame.paragraphs[0]
            tf.vertical_anchor = MSO_ANCHOR.TOP
            tf.word_wrap = True
            tf.margin_top = 0
            tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
            run = tf.add_run()
            run.text = "This is new text."
            font = run.font
            font.name = 'Univers LT Std 47 Cn Lt'
            font.size = Pt(10)
            font.bold = None
            font.italic = None  # cause value to be inherited from theme
            font.color.rgb = RGBColor(157, 163, 163)
    prs.save(pptfile)
    print(pptfile," Done!")


1 Ответ

0 голосов
/ 13 мая 2020

Это обсуждение в github может вам помочь:

Z-порядок фигур на слайде определяется исключительно порядком их документов в части слайда (например, slide1. xml). Таким образом, общая суть состоит в том, чтобы изменить порядок этой последовательности элементов. Фигуры слайда содержатся в «дереве фигур» слайда, элементе с тем же синтаксисом, что и у формы группы, только с другим именем. Я ожидаю, что вы сначала захотите взглянуть на объект pptx.shapes.shapetree.SlideShapeTree и его родительский BaseShapeTree, который вы получаете из slide.shapes. Атрибут _spTree этого объекта дает вам объект l xml для элемента, который позволит вам изменять порядок фигур.

[...]

I полагаем, что методы .addprevious () и .addnext () l xml действительно перемещают рассматриваемый элемент XML.

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

# shape will be positioned relative to this one, hence the name "cursor"

cursor_sp = shapes[3]._element
cursor_sp.addprevious(shapes[8]._element)

См. Вопрос на github

...