Получить границы абзаца из презентаций в .NET
Получить координаты абзаца и части в TextFrame
Используя Aspose.Slides for .NET, разработчики теперь могут получать прямоугольные координаты абзаца внутри коллекции абзацев TextFrame. Это также позволяет получать координаты части внутри коллекции частей абзаца. В этой теме мы продемонстрируем на примере, как получить прямоугольные координаты абзаца вместе с позицией части внутри абзаца.
Получить прямоугольные координаты абзаца
Добавлен новый метод GetRect(). Он позволяет получать прямоугольник границ абзаца.
// Создайте объект 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 или Paragraph в TextFrame ячейки таблицы, можно использовать методы IPortion.GetRect и IParagraph.GetRect.
Этот пример кода демонстрирует описанную операцию:
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 включён в TextFrame, текст переносится, чтобы соответствовать ширине области, что изменяет фактические границы абзаца.
Можно ли надёжно преобразовать координаты абзаца в пиксели в экспортируемом изображении?
Да. Переведите пункты в пиксели, используя: pixels = points × (DPI / 72). Результат зависит от выбранного DPI при рендеринге/экспорте.
Как получить «эффективные» параметры форматирования абзаца, учитывая наследование стилей?
Используйте effective paragraph formatting data structure; он возвращает окончательные объединённые значения для отступов, интервалов, переноса, RTL и других параметров.