Administrar cuadros de texto en presentaciones con Python

Resumen

Los textos en las diapositivas normalmente se encuentran en cuadros de texto o formas. Por lo tanto, para agregar texto a una diapositiva, debe agregar un cuadro de texto y luego colocar algo de texto dentro del cuadro. Aspose.Slides for Python proporciona la clase AutoShape que permite agregar una forma que contiene texto.

Crear cuadros de texto en diapositivas

Para crear un cuadro de texto en una diapositiva:

  1. Cree una instancia de la clase Presentation.
  2. Obtenga una referencia a la primera diapositiva.
  3. Agregue un AutoShape con ShapeType.RECTANGLE en la posición deseada de la diapositiva.
  4. Establezca el texto en el TextFrame de la forma.
  5. Guarde la presentación como un archivo PPTX.

El siguiente ejemplo de Python implementa estos pasos:

import aspose.slides as slides

# Instanciar la clase Presentation.
with slides.Presentation() as presentation:

    # Obtener la primera diapositiva de la presentación.
    slide = presentation.slides[0]

    # Añadir un AutoShape del tipo RECTANGLE.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 75, 150, 50)

    shape.text_frame.text = "Aspose TextBox"

    # Guardar la presentación en disco.
    presentation.save("TextBox.pptx", slides.export.SaveFormat.PPTX)

Comprobar si una forma es un cuadro de texto

Aspose.Slides proporciona la propiedad is_text_box en la clase AutoShape, que le permite determinar si una forma es un cuadro de texto.

Cuadro de texto y forma

Este ejemplo de Python muestra cómo comprobar si una forma se creó como un cuadro de texto:

import aspose.slides as slides

with slides.Presentation("Sample.pptx") as presentation:
    for slide in presentation.slides:
        for shape in slide.shapes:
            if isinstance(shape, slides.AutoShape):
                print("shape is a text box" if shape.is_text_box else "shape is not a text box")

Observe que si agrega un AutoShape utilizando la clase ShapeCollection, la propiedad is_text_box de la forma devuelve False. Sin embargo, después de agregar texto—ya sea con el método add_text_frame o estableciendo la propiedad textis_text_box devuelve True.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape1 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 40)
    # shape1.is_text_box es falso
    shape1.add_text_frame("shape 1")
    # shape1.is_text_box es verdadero

    shape2 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 110, 100, 40)
    # shape2.is_text_box es falso
    shape2.text_frame.text = "shape 2"
    # shape2.is_text_box es verdadero

    shape3 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 210, 100, 40)
    # shape3.is_text_box es falso
    shape3.add_text_frame("")
    # shape3.is_text_box es falso

    shape4 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 310, 100, 40)
    # shape4.is_text_box es falso
    shape4.text_frame.text = ""
    # shape4.is_text_box es falso

Agregar columnas a cuadros de texto

Aspose.Slides proporciona las propiedades column_count y column_spacing en la clase TextFrameFormat para agregar columnas a los cuadros de texto. Puede especificar el número de columnas y establecer el espaciado (en puntos) entre columnas.

El siguiente código Python demuestra esta operación:

import aspose.slides as slides

with slides.Presentation() as presentation:

	# Obtenga la primera diapositiva de la presentación.
	slide = presentation.slides[0]

	# Agregue un AutoShape de tipo RECTANGLE.
	shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 300, 300)

	# Agregue un TextFrame al rectángulo.
	shape.add_text_frame("All of these columns are confined to a single text container—" +
	"you can add or delete text, and any new or remaining text automatically reflows " +
	"within the container. You cannot have text flow from one container to another, " +
	"though—PowerPoint’s column options for text are limited!")

	# Obtenga el formato de texto del TextFrame.
	format = shape.text_frame.text_frame_format

	# Especifique el número de columnas en el TextFrame.
	format.column_count = 3

	# Especifique el espaciado entre columnas.
	format.column_spacing = 10

	# Guarde la presentación.
	presentation.save("ColumnCount.pptx", slides.export.SaveFormat.PPTX)

Actualizar texto

Aspose.Slides le permite actualizar el texto en un solo cuadro de texto o en toda la presentación.

El siguiente ejemplo de Python muestra cómo actualizar todo el texto en una presentación:

import aspose.slides as slides

with slides.Presentation("Sample.pptx") as presentation:
    for slide in presentation.slides:
        for shape in slide.shapes:
            if type(shape) is slides.AutoShape:
                for paragraph in shape.text_frame.paragraphs:
                    for portion in paragraph.portions:
                        portion.text = portion.text.replace("years", "months")
                        portion.portion_format.font_bold = 1
  
    # Guardar la presentación modificada.
    presentation.save("TextChanged.pptx", slides.export.SaveFormat.PPTX)

Agregar cuadros de texto con hipervínculos

Puede insertar un enlace en un cuadro de texto. Cuando se hace clic en el cuadro de texto, el enlace se abre.

Para agregar un cuadro de texto que contenga un hipervínculo, siga estos pasos:

  1. Cree una instancia de la clase Presentation.
  2. Obtenga una referencia a la primera diapositiva.
  3. Agregue un AutoShape con ShapeType.RECTANGLE en la posición deseada de la diapositiva.
  4. Establezca el texto en el TextFrame.
  5. Obtenga una referencia al HyperlinkManager.
  6. Utilice la propiedad hyperlink_manager para establecer un hipervínculo externo al hacer clic.
  7. Guarde la presentación como un archivo PPTX.

Este ejemplo de Python muestra cómo agregar un cuadro de texto con un hipervínculo a una diapositiva:

import aspose.slides as slides

# Instanciar la clase Presentation.
with slides.Presentation() as presentation:

    # Obtener la primera diapositiva de la presentación.
    slide = presentation.slides[0]

    # Agregar un AutoShape de tipo RECTANGLE.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 150, 150, 50)

    text_portion = shape.text_frame.paragraphs[0].portions[0]

    # Agregar texto al marco.
    text_portion.text = "Aspose.Slides"

    # Establecer un hipervínculo para el texto de la porción.
    hyperlink_manager = text_portion.portion_format.hyperlink_manager
    hyperlink_manager.set_external_hyperlink_click("http://www.aspose.com")

    # Guardar la presentación como un archivo PPTX.
    presentation.save("Hyperlink.pptx", slides.export.SaveFormat.PPTX)

Preguntas frecuentes

¿Cuál es la diferencia entre un cuadro de texto y un marcador de posición de texto al trabajar con diapositivas maestras?

Un placeholder hereda el estilo/posición de la master y puede ser sobrescrito en los layouts, mientras que un cuadro de texto regular es un objeto independiente en una diapositiva específica y no cambia al cambiar de diseño.

¿Cómo puedo realizar un reemplazo masivo de texto en toda la presentación sin tocar el texto dentro de gráficos, tablas y SmartArt?

Limite su iteración a auto‑formas que tengan marcos de texto y excluya los objetos incrustados (charts, tables, SmartArt) recorriéndolos por separado o omitiendo esos tipos de objetos.