Как прочитать нижние колонтитулы из слайдов и сохранить их как строку - PullRequest
0 голосов
/ 09 мая 2019

Я хочу прочитать все нижние колонтитулы из ppt с использованием python (python-pptx) и сохранить его в разных строках. Документация не очень помогает. Кто-нибудь может мне помочь с этим?

    >> slide_placeholders = slide.placeholders
    >> len(slide.placeholders)
       4

    >> slide.placeholders[4]
       KeyError...

Я ожидал получить объект нижнего колонтитула и каким-то образом прочитать его.

1 Ответ

0 голосов
/ 09 мая 2019

Slide.placeholders возвращает объект _SlidePlaceholders, который имеет необычную семантику, поскольку определение заполнителей может быть сложным. При использовании, как у вас выше, он имеет семантику dict, ключ - значение атрибута idx заполнителя. Этот атрибут idx определяется с помощью slide-layout , из которого был создан слайд и который, таким образом, являлся источником его заполнителей. Эти idx значения являются по существу произвольными и не гарантируют, что они являются смежными.

Вы можете узнать значения idx следующим образом:

for placeholder in slide.placeholders:
    print(placeholder.placeholder_format.idx)

Теперь вопрос: «Какой из этих заполнителей мне нужен?»

Есть несколько стратегий:

  1. Определить по значению idx : Конкретный заполнитель на двух разных слайдах, сформированных из одного макета слайда, будет иметь одинаковое значение idx. Если вы можете обнаружить это значение idx, используйте slide.placeholders[idx]. Обратите внимание, что это поиск dict (ключ), а не list (смещение) поиск.

  2. Идентификация по типу заполнителя: Заполнители бывают разных типов. https://python -pptx.readthedocs.io / о / последний / API / перечисление / PpPlaceholderType.html # ppplaceholdertype . Если тот, который вам нужен, является единственным на слайде этого типа, это может работать

 from pptx.enum.shapes import PP_PLACEHOLDER

 def find_placeholder():
     for placeholder in slide.placeholders:
         if p.placeholder_format.type == PP_PLACEHOLDER.FOOTER:
             return placeholder
     print("not found")
  1. Найти по z-порядку: Обычно это не очень надежно, потому что фигуры можно легко перемещать вперед и назад по z-порядку, но для полноты, скажем, вы полагали, что ваша фигура была последней (самой верхней) заполнитель:
# ---note: this is list-semantics item access, not dict---
placeholder = list(slide.placeholders)[-1]
...