Cómo agregar formas a PowerPoint en .NET

Cómo agregar formas a PowerPoint en .NET

Aspose.Slides FOSS for .NET admite agregar AutoShapes, Tables, Connectors y PictureFrames a las diapositivas de la presentación. Todos los tipos de forma se añaden a través de la colección slide.Shapes.

Guía paso a paso

Paso 1: Instalar el paquete

dotnet add package Aspose.Slides.Foss

Verifique la instalación:

using Aspose.Slides.Foss;
Console.WriteLine("Ready");

Paso 2: Crear una presentación

Siempre utilice Presentation con una declaración using.

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
var slide = prs.Slides[0];
// ... add shapes ...
prs.Save("output.pptx", SaveFormat.Pptx);

Paso 3: Añadir una AutoShape

slide.Shapes.AddAutoShape(shapeType, x, y, width, height) coloca una forma en la posición y tamaño dados (todos en puntos). Use las constantes ShapeType para seleccionar la forma.

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
var slide = prs.Slides[0];

// Rectangle
var rect = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 300, 100);
rect.AddTextFrame("Rectangle shape");

// Ellipse
var ellipse = slide.Shapes.AddAutoShape(ShapeType.Ellipse, 400, 50, 200, 100);
ellipse.AddTextFrame("Ellipse shape");

prs.Save("autoshapes.pptx", SaveFormat.Pptx);

Paso 4: Añadir una tabla

slide.Shapes.AddTable(x, y, columnWidths, rowHeights) crea una tabla en la posición especificada. Los anchos de columna y las alturas de fila son matrices de valores en puntos.

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
var slide = prs.Slides[0];

var colWidths = new double[] { 150.0, 150.0, 150.0 };
var rowHeights = new double[] { 40.0, 40.0, 40.0 };
var table = slide.Shapes.AddTable(50, 200, colWidths, rowHeights);

// Set header row text
string[] headers = { "Product", "Units", "Revenue" };
for (int col = 0; col < headers.Length; col++)
    table.Rows[0][col].TextFrame.Text = headers[col];

// Set data rows
string[][] rows = {
    new[] { "Widget A", "120", "$2,400" },
    new[] { "Widget B", "85", "$1,700" },
};
for (int rowIdx = 0; rowIdx < rows.Length; rowIdx++)
    for (int col = 0; col < rows[rowIdx].Length; col++)
        table.Rows[rowIdx + 1][col].TextFrame.Text = rows[rowIdx][col];

prs.Save("table.pptx", SaveFormat.Pptx);

Paso 5: Añadir un conector

Los conectores enlazan visualmente dos formas. Crea primero las formas, luego agrega un conector y establece sus puntos de conexión de inicio y fin.

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
var slide = prs.Slides[0];

var box1 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 100, 150, 60);
box1.AddTextFrame("Start");

var box2 = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 350, 100, 150, 60);
box2.AddTextFrame("End");

var conn = slide.Shapes.AddConnector(ShapeType.BentConnector3, 0, 0, 10, 10);
conn.StartShapeConnectedTo = box1;
conn.StartShapeConnectionSiteIndex = 3;  // right side of box1
conn.EndShapeConnectedTo = box2;
conn.EndShapeConnectionSiteIndex = 1;    // left side of box2

prs.Save("connector.pptx", SaveFormat.Pptx);

Los índices de los sitios de conexión se numeran del 0 al 3 para un rectángulo: top=0, left=1, bottom=2, right=3.


Paso 6: Agregar un marco de imagen

Incruste una imagen y agréguela a la diapositiva como un PictureFrame. Lea los bytes de la imagen primero, añádalos a la colección de imágenes de la presentación y luego cree el marco.

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Export;

using var prs = new Presentation();
byte[] imageData = File.ReadAllBytes("logo.png");
var image = prs.Images.AddImage(imageData);

var slide = prs.Slides[0];
slide.Shapes.AddPictureFrame(
    ShapeType.Rectangle,  // bounding shape type
    50, 50,               // x, y in points
    200, 150,             // width, height in points
    image
);

prs.Save("with-image.pptx", SaveFormat.Pptx);

Problemas comunes y soluciones

La forma aparece fuera del área visible de la diapositiva

Las diapositivas son 720 × 540 puntos por defecto. Los valores de x o y fuera de esos límites colocan la forma fuera de la diapositiva. Mantenga x < 720 y y < 540, y asegúrese de x + width <= 720 y y + height <= 540.

NullReferenceException al acceder TextFrame

AddAutoShape() devuelve el objeto shape directamente. Si ves null, verifica que no estés descartando el valor de retorno.

El texto de la celda de la tabla está vacío después de la asignación

La propiedad correcta es .TextFrame.Text (no .Text directamente en la celda). Acceda a las celdas como table.Rows[rowIndex][colIndex].TextFrame.Text = "value".


Preguntas frecuentes

¿Cuántas formas puedo añadir a una diapositiva?

No hay un límite impuesto por la biblioteca. Los límites prácticos dependen del tamaño del archivo y de la capacidad de renderizado de su visor PPTX de destino.

¿Puedo cambiar la posición de una forma después de agregarla?

Sí. El objeto shape devuelto por AddAutoShape() tiene las propiedades X, Y, Width y Height que puedes establecer:

shape.X = 100;
shape.Y = 200;
shape.Width = 400;
shape.Height = 80;

¿Puedo establecer el color del contorno (borde) de la forma?

Sí, a través de shape.LineFormat:

using Aspose.Slides.Foss.Drawing;
shape.LineFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(255, 200, 0, 0);

¿Se admiten los gráficos?

No. Los gráficos, SmartArt y los objetos OLE no están implementados en esta edición.


Ver también

 Español