# Получить границы абзаца из презентаций в .NET

> Узнайте, как получить границы абзаца и текстовых фрагментов в Aspose.Slides for .NET для оптимизации позиционирования текста в презентациях PowerPoint.

Source: https://docs.aspose.com/slides/ru/net/paragraph/
Updated: 2025-12-10


## **Получить координаты абзаца и части в TextFrame**
Используя Aspose.Slides for .NET, разработчики теперь могут получать прямоугольные координаты абзаца внутри коллекции абзацев TextFrame. Это также позволяет получать координаты части внутри коллекции частей абзаца. В этой теме мы продемонстрируем на примере, как получить прямоугольные координаты абзаца вместе с позицией части внутри абзаца.

## **Получить прямоугольные координаты абзаца**
Добавлен новый метод **GetRect()**. Он позволяет получать прямоугольник границ абзаца.
```c#
// Создайте объект Presentation, представляющий файл презентации
using (Presentation presentation = new Presentation("Shapes.pptx"))
{
    IAutoShape shape = (IAutoShape)presentation.Slides[0].Shapes[0];
        var textFrame = (ITextFrame)shape.TextFrame;
        RectangleF rect = ((Paragraph)textFrame.Paragraphs[0]).GetRect();
}
```


## **Получить размер абзаца и части внутри TextFrame ячейки таблицы**
Чтобы получить размер и координаты [Portion](https://reference.aspose.com/slides/net/aspose.slides/portion) или [Paragraph](https://reference.aspose.com/slides/net/aspose.slides/paragraph) в TextFrame ячейки таблицы, можно использовать методы [IPortion.GetRect](https://reference.aspose.com/slides/net/aspose.slides/iportion/methods/getrect) и [IParagraph.GetRect](https://reference.aspose.com/slides/net/aspose.slides/iparagraph/methods/getrect).

Этот пример кода демонстрирует описанную операцию:
```csharp
using (Presentation pres = new Presentation("source.pptx"))
{
    Table tbl = pres.Slides[0].Shapes[0] as Table;

    ICell cell = tbl.Rows[1][1];


    double x = tbl.X + tbl.Rows[1][1].OffsetX;
    double y = tbl.Y + tbl.Rows[1][1].OffsetY;

    foreach (IParagraph para in cell.TextFrame.Paragraphs)
    {
        if (para.Text == "")
            continue;

        RectangleF rect = para.GetRect();
        IAutoShape shape =
            pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle,
                rect.X + (float)x, rect.Y + (float)y, rect.Width, rect.Height);

        shape.FillFormat.FillType = FillType.NoFill;
        shape.LineFormat.FillFormat.SolidFillColor.Color = Color.Yellow;
        shape.LineFormat.FillFormat.FillType = FillType.Solid;


        foreach (IPortion portion in para.Portions)
        {
            if (portion.Text.Contains("0"))
            {
                rect = portion.GetRect();
                shape =
                    pres.Slides[0].Shapes.AddAutoShape(ShapeType.Rectangle,
                        rect.X + (float)x, rect.Y + (float)y, rect.Width, rect.Height);

                shape.FillFormat.FillType = FillType.NoFill;
            }
        }
    }
}
```


## **FAQ**

**В каких единицах возвращаются координаты абзаца и текстовых фрагментов?**  
В пунктах, где 1 дюйм = 72 пункта. Это относится ко всем координатам и размерам на слайде.

**Влияет ли перенос слов на границы абзаца?**  
Да. Если [wrapping](https://reference.aspose.com/slides/net/aspose.slides/textframeformat/wraptext/) включён в [TextFrame](https://reference.aspose.com/slides/net/aspose.slides/textframe/), текст переносится, чтобы соответствовать ширине области, что изменяет фактические границы абзаца.

**Можно ли надёжно преобразовать координаты абзаца в пиксели в экспортируемом изображении?**  
Да. Переведите пункты в пиксели, используя: pixels = points × (DPI / 72). Результат зависит от выбранного DPI при рендеринге/экспорте.

**Как получить «эффективные» параметры форматирования абзаца, учитывая наследование стилей?**  
Используйте [effective paragraph formatting data structure](/slides/ru/net/shape-effective-properties/); он возвращает окончательные объединённые значения для отступов, интервалов, переноса, RTL и других параметров.
