Layout Placeholders

Candidate protocol

>>> slide_layout = prs.slide_layouts[0]
>>> slide_layout
<pptx.parts.slidelayout.SlideLayout object at 0x10a5d42d0>
>>> slide_layout.shapes
<pptx.shapes.shapetree.LayoutShapes object at 0x104e60000>
>>> slide_layout.shapes[0]
<pptx.shapes.placeholder.LayoutPlaceholder object at 0x104e60020>
>>> layout_placeholders = slide_layout.placeholders
>>> layout_placeholders
<pptx.shapes.shapetree.LayoutPlaceholders object at 0x104e60040>
>>> len(layout_placeholders)
5
>>> layout_placeholders[1].type
'body'
>>> layout_placeholders[2].idx
10
>>> layout_placeholders.get(idx=0)
<pptx.shapes.placeholder.MasterPlaceholder object at 0x104e60020>
>>> layout_placeholders.get(idx=666)
None
>>> layout_placeholders[1]._sp.spPr.xfrm
None
>>> layout_placeholders[1].width  # should inherit from master placehldr
8229600

Example XML

Slide layout placeholder:

<p:sp>
  <p:nvSpPr>
    <p:cNvPr id="3" name="Content Placeholder 2"/>
    <p:cNvSpPr>
      <a:spLocks noGrp="1"/>
    </p:cNvSpPr>
    <p:nvPr>
      <p:ph idx="1"/>
    </p:nvPr>
  </p:nvSpPr>
  <p:spPr/>
  <p:txBody>
    <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

  • 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.

Layout placeholder inheritance

Objective: determine layout placeholder inheritee for each ph type

Observations:

Layout placeholder with lyt-ph-type inherits color from master placeholder with mst-ph-type, noting idx value match.

lyt-ph-type mst-ph-type notes
ctrTitle title title layout - idx value matches (None, => 0)
subTitle body title layout - idx value matches (1)
dt dt title layout - idx 10 != 2
ftr ftr title layout - idx 11 != 3
sldNum sldNum title layout - idx 12 != 4
title title bullet layout - idx value matches (None, => 0)
None (obj) body bullet layout - idx value matches (1)
body body sect hdr - idx value matches (1)
None (obj) body two content - idx 2 != 1
body body comparison - idx 3 != 1
pic body picture - idx value matches (1)
chart body manual - idx 9 != 1
clipArt body manual - idx 9 != 1
dgm body manual - idx 9 != 1
media body manual - idx 9 != 1
tbl body manual - idx 9 != 1
hdr repair err valid only in Notes and Handout Slide
sldImg repair err valid only in Notes and Handout Slide