Что ж, я ожидаю, что перед вами стоит несколько проблем, чтобы получить эту работу, и SO - это место с одним вопросом / одним ответом, поэтому давайте сузим это до первого вопроса, который мы можем назвать «Отображение макетов между шаблонами PPTX с python -pptx». Возможно, стоит подумать об изменении названия вопроса на что-то в этом роде.
Конечно, вы можете задать более сфокусированные вопросы на следующем и следующем шаге, например, c.
Мой Первая проблема заключается в следующем:
Для каждого слайда в презентации source создайте слайд в презентации target , используя слайд новой версии. макет, который соответствует макету исходного слайда.
Я склонен думать, что это сводится к такой функции:
layout_map = {
"Title Slide": "Title",
"Intro Slide": "Introduction",
"Generic Process": "Process",
...
}
def corresponding_slide_layout(slide, new_prs):
legacy_layout_name = slide.slide_layout.name
new_name = layout_map.get(legacy_layout_name)
if new_name is None:
# --- there's a gap in the mapping ---
return None
return new_prs.slide_layouts.get_by_name(new_name)
new_prs = Presentation("my-new-template.pptx")
for slide in prs.slides:
layout = corresponding_slide_layout(slide, new_prs)
if layout is None:
layout = new_prs.slide_layouts[5] # --- or whatever default ---
new_slide = new_prs.slides.add_slide(layout)
# --- then pass to other function you write to do the shape copying ---
copy_slide_contents(slide, new_slide)
Общая суть в том, что вы отображаете старые макеты стиля к макетам нового стиля name , а затем используйте это отображение, чтобы выбрать макет для каждого целевого слайда. Это должно быть довольно надежно с возможным добавлением значения по умолчанию, когда либо нет четкого отображения, либо, возможно, пользователь отредактировал оригинальное имя или что-то в этом роде.