Получить границы абзаца из презентаций в .NET
Обзор
Эта статья объясняет, как получить границы, размер и координаты абзацев в Aspose.Slides. Она показывает, как извлечь прямоугольник абзаца из ITextFrame с помощью IParagraph.GetRect, как получить координаты абзаца внутри текстового кадра ячейки таблицы и подчёркивает важные детали, такие как единицы измерения, влияние переноса текста на границы, преобразование в пиксели и «эффективные» параметры форматирования абзаца.
Получить прямоугольные координаты абзаца
Используйте IParagraph.GetRect чтобы получить ограничивающий прямоугольник абзаца.
using var presentation = new Presentation("Shapes.pptx");
var slide = presentation.Slides[0];
var shape = (IAutoShape)slide.Shapes[0];
var paragraph = shape.TextFrame.Paragraphs[0];
var rectangle = paragraph.GetRect();
Получить размер абзаца внутри текстового кадра ячейки таблицы
Чтобы получить размер и координаты IParagraph в текстовом кадре ячейки таблицы, используйте IParagraph.GetRect. Возвращаемый прямоугольник относителен к текстовому кадру ячейки таблицы, поэтому добавляйте позицию таблицы и смещение ячейки, когда нужны координаты уровня слайда.
Следующий пример получает границы абзаца внутри ячейки таблицы и рисует прямоугольники на слайде для визуализации этих границ:
using var presentation = new Presentation("source.pptx");
var slide = presentation.Slides[0];
var table = (ITable)slide.Shapes[0];
var cell = table.Rows[1][1];
var cellX = table.X + cell.OffsetX;
var cellY = table.Y + cell.OffsetY;
foreach (var paragraph in cell.TextFrame.Paragraphs)
{
if (string.IsNullOrEmpty(paragraph.Text))
continue;
var paragraphRectangle = paragraph.GetRect();
var paragraphRectangleX = paragraphRectangle.X + (float)cellX;
var paragraphRectangleY = paragraphRectangle.Y + (float)cellY;
var paragraphBoundsShape = presentation.Slides[0].Shapes.AddAutoShape(
ShapeType.Rectangle,
paragraphRectangleX,
paragraphRectangleY,
paragraphRectangle.Width,
paragraphRectangle.Height);
paragraphBoundsShape.FillFormat.FillType = FillType.NoFill;
paragraphBoundsShape.LineFormat.FillFormat.SolidFillColor.Color = Color.Yellow;
paragraphBoundsShape.LineFormat.FillFormat.FillType = FillType.Solid;
}
presentation.Save("output.pptx", SaveFormat.Pptx);
FAQ
В каких единицах измеряются координаты абзаца?
Они измеряются в пунктах, где 1 дюйм равен 72 пунктам. Это относится ко всем координатам и размерам на слайде.
Влияет ли перенос слов на границы абзаца?
Да. Если для ITextFrame включён TextFrameFormat.WrapText, текст разбивается, чтобы вписаться в ширину области, что изменяет фактические границы абзаца.
Можно ли надёжно отобразить координаты абзаца в пикселях экспортированного изображения?
Да. Преобразуйте пункты в пиксели по формуле: пиксели = пункты × (DPI / 72). Результат зависит от выбранного DPI при рендеринге или экспорте.
Как получить «эффективные» параметры форматирования абзаца, учитывая наследование стилей?
Используйте структура данных эффективного форматирования абзаца; она возвращает окончательные консолидированные значения отступов, интервалов, переноса, RTL и др.