Python-pptx: копировать слайд

1

Как скопировать слайд?

Я создал слайд шаблона, и мне нужно его скопировать и отредактировать формы каждой копии отдельно.

Или как я могу добавить свой слайд шаблона в presentation.slide_layouts?

Теги:
python-pptx

3 ответа

1
Лучший ответ

Это то, что я нашел на GitHub, и это работает для меня. Я изменил пару вещей для своего проекта. Вам нужно будет импортировать шесть и скопировать. Я использую pptx-6.10

def duplicate_slide(pres,index):
        template = pres.slides[index]
        try:
            blank_slide_layout = pres.slide_layouts[12]
        except:
            blank_slide_layout = pres.slide_layouts[len(pres.slide_layouts)]

        copied_slide = pres.slides.add_slide(blank_slide_layout)

        for shp in template.shapes:
            el = shp.element
            newel = copy.deepcopy(el)
            copied_slide.shapes._spTree.insert_element_before(newel, 'p:extLst')

        for _, value in six.iteritems(template.part.rels):
            # Make sure we don't copy a notesSlide relation as that won't exist
            if "notesSlide" not in value.reltype:
                copied_slide.part.rels.add_relationship(value.reltype,
                                                value._target,
                                                value.rId)

        return copied_slide

Затем вы можете создать копию с передачей в своей презентации и индексом слайда вашего шаблона:

copied_slide = duplicate_slide(pres, 4)

Я все еще работаю над редактированием фигур из скопированного слайда, как только я буду дальше в своем проекте, я могу обновить

  • 0
    какие-нибудь обновления в вашей работе?
  • 0
    да, извините за задержку Я отправил как другой ответ ниже
0

Извините за задержку, я был перемещен в другой проект. Я смог завершить свой проект ppt, используя несколько слайдов шаблонов и копируя их. В конце построения презентации я удаляю шаблоны. Чтобы захватить фигуры, вам нужно будет пройтись по слайду и найти название фигуры, которую вы ищете. Как только вы это вернули, вы можете отредактировать форму по мере необходимости. Я добавил версию функции add_text, которую я использую для заполнения shape.text_frame.

def find_shape_by_name(shapes,name):
        for shape in shapes:
            if shape.name == name:
                return shape
        return None

def add_text(shape,text,alignment=None):

    if alignment:
        shape.vertical_anchor = alignment

    tf = shape.text_frame
    tf.clear()
    run = tf.paragraphs[0].add_run()
    run.text = text if text else ''

Чтобы найти форму "слайд_титл"

slide_title = find_shape_by_name(slide.shapes,'slide_title')

Чтобы добавить текст в форму

add_text(slide_title,'TEST SLIDE')

Пожалуйста, дайте мне знать, если вам нужна другая помощь

0

Так как я также нашел другой сценарий использования кода, предоставленного @d_bergeron, я просто хотел поделиться им здесь. В моем случае я хотел скопировать слайд из другой презентации в ту, которую я создал с помощью python-pptx:

В качестве аргумента я передаю объект Presentation(), который я создал с помощью python-pptx (prs = Presenation()).

from pptx import Presentation
import copy

def copy_slide_from_external_prs(prs):

    # copy from external presentation all objects into the existing presentation
    external_pres = Presentation("PATH/TO/PRES/TO/IMPORT/from.pptx")

    # specify the slide you want to copy the contents from
    ext_slide = external_pres.slides[0]

    # Define the layout you want to use from your generated pptx
    SLD_LAYOUT = 5
    slide_layout = prs.slide_layouts[SLD_LAYOUT]

    # create now slide, to copy contents to 
    curr_slide = prs.slides.add_slide(slide_layout)

    # now copy contents from external slide, but do not copy slide properties
    # e.g. slide layouts, etc., because these would produce errors, as diplicate
    # entries might be generated

    for shp in ext_slide.shapes:
        el = shp.element
        newel = copy.deepcopy(el)
        curr_slide.shapes._spTree.insert_element_before(newel, 'p:extLst')

    return prs

В основном я публикую его здесь, так как я искал способ скопировать внешний слайд в свою презентацию и оказался в этой теме.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню