Autofit setting

Overview

PowerPoint provides the autofit property to specify how to handle text that is too big to fit within its shape. The three possible settings are:

  • resize shape to fit text
  • resize text to fit shape
  • resize neither the shape nor the text, allowing the text to extend beyond the bounding box

Auto size is closely related to word wrap.

There are certain constraining settings for resizing the text, not sure if those are supported in PowerPoint or not.

Protocol

>>> text_frame = shape.text_frame
>>> text_frame.auto_size
None
>>> text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
>>> text_frame.auto_size
1
>>> text_frame.auto_size = MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE
>>> text_frame.auto_size
2
>>> str(text_frame.auto_size)
'MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE'
>>> text_frame.auto_size = MSO_AUTO_SIZE.NONE
>>> text_frame.auto_size
0
>>> text_frame.auto_size = None
>>> text_frame.auto_size
None

Scenarios

Default new textbox. When adding a new texbox from the PowerPoint toolbar, the new textbox sizes itself to fit the entered text. This corresponds to the setting MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT and word_wrap = None.

MSO_AUTO_SIZE.NONE, word_wrap = False. Text is free form, with PowerPoint exhibiting no formatting behavior. Text appears just as entered and lines are broken only where hard breaks are inserted.

MSO_AUTO_SIZE.NONE, word_wrap = True. Text is wrapped into a column the width of the shape, but is not constrained vertically.

MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT, word_wrap = False. The width of the shape expands as new text is entered. Line breaks occur only where hard breaks are entered. The height of the shape grows to accommodate the number of lines of entered text. Width and height shrink as extents of the text are reduced by deleting text or reducing font size.

MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT, word_wrap = True. Text is wrapped into a column the width of the shape, with the height of the shape growing to accommodate the resulting number of lines.

MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE, word_wrap = False. Experiment …

MSO_AUTO_SIZE.TEXT_TO_FIT_SHAPE, word_wrap = True. Experiment …

XML specimens

Default new textbox:

<p:sp>
  <p:nvSpPr>
    <p:cNvPr id="4" name="Foobar 3"/>
    <p:cNvSpPr txBox="1"/>
    <p:nvPr/>
  </p:nvSpPr>
  <p:spPr>
    <a:xfrm>
      <a:off x="914400" y="914400"/>
      <a:ext cx="914400" cy="914400"/>
    </a:xfrm>
    <a:prstGeom prst="rect">
      <a:avLst/>
    </a:prstGeom>
    <a:noFill/>
  </p:spPr>
  <p:txBody>
    <a:bodyPr wrap="none">
      <a:spAutoFit/>
    </a:bodyPr>
    <a:lstStyle/>
    <a:p/>
  </p:txBody>
</p:sp>