Mejora tus presentaciones con AutoFit en Python

Introducción

Por defecto, cuando añades un cuadro de texto, Microsoft PowerPoint usa la configuración Resize shape to fit text para el cuadro de texto: redimensiona automáticamente el cuadro de texto para garantizar que su texto siempre quepa en él.

Cuadro de texto en PowerPoint

  • Cuando el texto del cuadro se hace más largo o más grande, PowerPoint amplía automáticamente el cuadro —aumenta su altura— para permitir que contenga más texto.
  • Cuando el texto del cuadro se acorta o disminuye, PowerPoint reduce automáticamente el cuadro —disminuye su altura— para eliminar el espacio sobrante.

En PowerPoint, estos son los 4 parámetros u opciones importantes que controlan el comportamiento de autofit para un cuadro de texto:

  • Do not Autofit
  • Shrink text on overflow
  • Resize shape to fit text
  • Wrap text in shape.

opciones‑autofit‑powerpoint

Aspose.Slides for Python via Java ofrece opciones similares —algunas propiedades bajo la clase TextFrameFormat— que permiten controlar el comportamiento de autofit para los cuadros de texto en presentaciones.

Redimensionar forma para ajustarse al texto

Si deseas que el texto de un cuadro siempre quepa dentro de él después de cualquier cambio, debes usar la opción Resize shape to fit text. Para especificar esta configuración, usa el método setAutofitType (de la clase TextFrameFormat) con Shape.

ajuste‑siempre‑powerpoint

Este código Python muestra cómo indicar que el texto debe ajustarse siempre a su cuadro en una presentación de PowerPoint:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ShapeType, Portion, FillType, TextAutofitType, SaveFormat
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30, 350, 100)

    portion = Portion("lorem ipsum...")
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
    portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
    auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion)

    text_frame_format = auto_shape.getTextFrame().getTextFrameFormat()
    text_frame_format.setAutofitType(TextAutofitType.Shape)

    presentation.save("Output-presentation.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Si el texto se vuelve más largo o más grande, el cuadro de texto se redimensionará automáticamente (aumentará su altura) para que todo el texto quepa. Si el texto se acorta, ocurrirá lo inverso.

No autofit

Si deseas que un cuadro de texto o forma mantenga sus dimensiones independientemente de los cambios en el texto que contiene, debes usar la opción Do not Autofit. Para especificar esta configuración, usa el método setAutofitType (de la clase TextFrameFormat) con None.

no‑autofit‑powerpoint

Este código Python muestra cómo indicar que un cuadro de texto debe mantener siempre sus dimensiones en una presentación de PowerPoint:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ShapeType, Portion, FillType, TextAutofitType, SaveFormat
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30, 350, 100)

    portion = Portion("lorem ipsum...")
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
    portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
    auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion)

    text_frame_format = auto_shape.getTextFrame().getTextFrameFormat()
    text_frame_format.setAutofitType(TextAutofitType.None_)

    presentation.save("Output-presentation.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Cuando el texto supera el tamaño del cuadro, se desborda.

Reducir texto al desbordarse

Si el texto se vuelve demasiado largo para su cuadro, puedes usar la opción Shrink text on overflow para indicar que el tamaño y el espaciado del texto deben reducirse para que quepa en el cuadro. Para especificar esta configuración, usa el método setAutofitType (de la clase TextFrameFormat) con Normal.

reducir‑texto‑desbordamiento‑powerpoint

Este código Python muestra cómo indicar que el texto debe reducirse al desbordarse en una presentación de PowerPoint:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ShapeType, Portion, FillType, TextAutofitType, SaveFormat
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30, 350, 100)

    portion = Portion("lorem ipsum...")
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
    portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
    auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion)

    text_frame_format = auto_shape.getTextFrame().getTextFrameFormat()
    text_frame_format.setAutofitType(TextAutofitType.Normal)

    presentation.save("Output-presentation.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Ajustar texto en forma

Si deseas que el texto dentro de una forma se ajuste (haga wrap) cuando supera el borde de la forma (solo ancho), debes usar el parámetro Wrap text in shape. Para especificar esta configuración, debes usar el método setWrapText (de la clase TextFrameFormat) con NullableBool.True_.

Este código Python muestra cómo usar la configuración Wrap Text en una presentación de PowerPoint:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, ShapeType, Portion, FillType, NullableBool, SaveFormat
from java.awt import Color

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)
    auto_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, 30, 30, 350, 100)

    portion = Portion("lorem ipsum...")
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
    portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
    auto_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().add(portion)

    text_frame_format = auto_shape.getTextFrame().getTextFrameFormat()
    text_frame_format.setWrapText(NullableBool.True_)

    presentation.save("Output-presentation.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Preguntas frecuentes

¿Los márgenes internos del marco de texto afectan al AutoFit?

Sí. El padding (márgenes internos) reduce el área utilizable para el texto, por lo que AutoFit se activará antes, reduciendo la fuente o el tamaño de la forma con mayor rapidez. Revisa y ajusta los márgenes antes de afinar AutoFit.

¿Cómo interactúa AutoFit con saltos de línea manuales y suaves?

Los saltos forzados permanecen, y AutoFit adapta el tamaño de la fuente y el espaciado a su alrededor. Eliminar saltos innecesarios suele reducir la agresividad con la que AutoFit debe encoger el texto.

¿Cambiar la fuente del tema o activar la sustitución de fuentes afecta a los resultados de AutoFit?

Sí. Sustituir una fuente por otra con métricas de glifos diferentes cambia el ancho/alto del texto, lo que puede modificar el tamaño final de la fuente y el ajuste de líneas. Tras cualquier cambio o sustitución de fuente, revisa nuevamente las diapositivas.