Как добавить фигуры в PowerPoint с помощью .NET

Как добавить фигуры в PowerPoint с помощью .NET

Aspose.Slides FOSS for .NET поддерживает добавление AutoShapes, Tables, Connectors и PictureFrames в слайды презентаций. Все типы фигур добавляются через коллекцию slide.Shapes.

Пошаговое руководство

Шаг 1: Установить пакет

dotnet add package Aspose.Slides.Foss

Проверьте установку:

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

Шаг 2: Создать презентацию

Всегда используйте Presentation с 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);

Шаг 3: Добавить AutoShape

slide.Shapes.AddAutoShape(shapeType, x, y, width, height) размещает форму в заданной позиции и размере (все в пунктах). Используйте константы ShapeType для выбора формы.

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);

Шаг 4: Добавить таблицу

slide.Shapes.AddTable(x, y, columnWidths, rowHeights) создает таблицу в указанной позиции. Ширины столбцов и высоты строк представляют собой массивы значений в пунктах.

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);

Шаг 5: Добавить соединитель

Коннекторы визуально связывают две фигуры. Сначала создайте фигуры, затем добавьте коннектор и задайте его начальные и конечные точки соединения.

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);

Индексы точек подключения нумеруются от 0 до 3 для прямоугольника: верх = 0, левый = 1, низ = 2, правый = 3.


Шаг 6: Добавить рамку для изображения

Вставьте изображение и добавьте его на слайд как PictureFrame. Сначала прочитайте байты изображения, добавьте их в коллекцию изображений презентации, затем создайте кадр.

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);

Распространённые проблемы и решения

Фигура находится за пределами видимой области слайда

Слайды по умолчанию имеют размер 720 × 540 пунктов. Значения x или y за пределами этих границ размещают объект за пределами слайда. Сохраните x < 720 и y < 540, и обеспечьте x + width <= 720 и y + height <= 540.

NullReferenceException при доступе к TextFrame

AddAutoShape() возвращает объект формы напрямую. Если вы видите null, проверьте, что вы не отбрасываете возвращаемое значение.

Текст ячейки таблицы пуст после присваивания

Правильное свойство — .TextFrame.Text (не .Text непосредственно на ячейке). Доступ к ячейкам осуществляется как table.Rows[rowIndex][colIndex].TextFrame.Text = "value".


Часто задаваемые вопросы

Сколько фигур я могу добавить на слайд?

Нет ограничений, накладываемых библиотекой. Практические ограничения зависят от размера файла и возможностей рендеринга вашего целевого просмотрщика PPTX.

Могу ли я изменить позицию фигуры после её добавления?

Да. Объект shape, возвращаемый AddAutoShape(), имеет свойства X, Y, Width и Height, которые вы можете установить:

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

Могу ли я задать цвет контура (границы) фигуры?

Да, через shape.LineFormat:

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

Поддерживаются ли диаграммы?

Нет. Диаграммы, SmartArt и OLE‑объекты не реализованы в этом издании.


См. также

 Русский