Master Placeholders

Candidate protocol

>>> slide_master = prs.slide_master
>>> slide_master.shapes
<pptx.shapes.slidemaster.MasterShapes object at 0x10a4df150>

>>> slide_master.shapes[0]
<pptx.shapes.placeholder.MasterPlaceholder object at 0x104e60290>
>>> master_placeholders = slide_master.placeholders
>>> master_placeholders
<pptx.shapes.shapetree.MasterPlaceholders object at 0x104371290>
>>> len(master_placeholders)
5
>>> master_placeholders[0].type
'title'
>>> master_placeholders[0].idx
0
>>> master_placeholders.get(type='body')
<pptx.shapes.placeholder.MasterPlaceholder object at 0x104e60290>
>>> master_placeholders.get(idx=666)
None

Example XML

Slide master placeholder:

<p:sp>
  <p:nvSpPr>
    <p:cNvPr id="3" name="Text Placeholder 2"/>
    <p:cNvSpPr>
      <a:spLocks noGrp="1"/>
    </p:cNvSpPr>
    <p:nvPr>
      <p:ph type="body" idx="1"/>
    </p:nvPr>
  </p:nvSpPr>
  <p:spPr>
    <a:xfrm>
      <a:off x="457200" y="1600200"/>
      <a:ext cx="8229600" cy="4525963"/>
    </a:xfrm>
    <a:prstGeom prst="rect">
      <a:avLst/>
    </a:prstGeom>
  </p:spPr>
  <p:txBody>
    <a:bodyPr vert="horz" lIns="91440" tIns="45720" rIns="91440"
              bIns="45720" rtlCol="0">
      <a:normAutofit/>
    </a:bodyPr>
    <a:lstStyle/>
    <a:p>
      <a:pPr lvl="0"/>
      <a:r>
        <a:rPr lang="en-US" smtClean="0"/>
        <a:t>Click to edit Master text styles</a:t>
      </a:r>
    </a:p>
    <a:p>
      ... and others through lvl="4", five total
    </a:p>
  </p:txBody>
</p:sp>

Behaviors

  • Master placeholder specifies size, position, geometry, and text body properties, such as margins (inset) and autofit

  • It appears a slide master permits at most five placeholders, at most one each of title, body, date, footer, and slide number

  • A master placeholder is always a <p:sp> (autoshape) element. It does not allow the insertion of content, although text entered in the shape somehow becomes the prompt text for inheriting placeholders.

  • Hypothesis:

    • Layout inherits properties from master based only on type (e.g. body, dt), with no bearing on idx value.

    • Slide inherits from layout strictly on idx value.

    • Need to experiment to see if position and size are inherited on body placeholder by type or if idx has any effect

      • expanded/repackaged, change body ph idx on layout and see if still inherits position.

      • result: slide layout still appears with the proper position and size, however the slide placeholder appears at (0, 0) and apparently with size of (0, 0).

    • What behavior is exhibited when a slide layout contains two body placeholders, neither of which has a matching idx value and neither of which has a specified size or position?

      • result: both placeholders are present, directly superimposed upon each other. They both inherit position and fill.

  • GUI doesn’t seem to provide a way to add additional “footer” placeholders

  • Does the MS API include populated object placeholders in the Placeholders collection?