Получить границы фрагмента текста из презентаций в .NET
Обзор
Фрагмент текста представляет собой конкретный кусок текста внутри абзаца и позволяет работать с этим куском независимо от окружающего содержимого. В Aspose.Slides фрагменты могут использоваться, когда необходимо получить границы текстового куска, применить форматирование только к части абзаца или управлять поведением текста на более детальном уровне.
В этой статье показано, как получить ограничивающий прямоугольник фрагмента, используя IPortion.GetRect. Также показано, как получить координаты начала фрагмента, используя IPortion.GetCoordinates. Кроме того, рассмотрены распространённые сценарии, связанные с фрагментами, такие как применение гиперссылки к отдельному куску текста, понимание того, как форматирование наследуется через фрагмент, абзац, текстовый кадр и тему, а также обработка случаев, когда указанный шрифт недоступен.
Получить границы фрагмента текста
Используйте IPortion.GetRect для получения ограничивающего прямоугольника фрагмента текста:
using var presentation = new Presentation("Shapes.pptx");
var slide = presentation.Slides[0];
var shape = (IAutoShape)slide.Shapes[0];
foreach (var paragraph in shape.TextFrame.Paragraphs)
{
foreach (var portion in paragraph.Portions)
{
var rectangle = portion.GetRect();
Console.WriteLine($"X = {rectangle.X}; Y = {rectangle.Y}; Width = {rectangle.Width}; Height = {rectangle.Height}");
}
}
Получить координаты фрагмента текста
Используйте IPortion.GetCoordinates для получения координат начала фрагмента текста:
using var presentation = new Presentation("Shapes.pptx");
var slide = presentation.Slides[0];
var shape = (IAutoShape)slide.Shapes[0];
foreach (var paragraph in shape.TextFrame.Paragraphs)
{
foreach (var portion in paragraph.Portions)
{
var point = portion.GetCoordinates();
Console.WriteLine($"X = {point.X}; Y = {point.Y}");
}
}
FAQ
Могу ли я применить гиперссылку только к части текста в одном абзаце?
Да, вы можете assign a hyperlink отдельному фрагменту; только этот кусок будет кликабельным, а не весь абзац.
Как работает наследование стилей: что переопределяет фрагмент, а что берётся из абзаца или текстового кадра?
Свойства уровня фрагмента имеют наивысший приоритет. Если свойство не задано на IPortion, Aspose.Slides берёт его из IParagraph. Если оно не задано и там, Aspose.Slides использует стиль из ITextFrame или theme.
Что происходит, если указанный для фрагмента шрифт отсутствует на целевом компьютере или сервере?
Применяются Font substitution rules. Текст может перераспределяться: могут измениться метрики, переносы и ширина, что важно для точного позиционирования.
Могу ли я задать прозрачность заливки текста или градиент для конкретного фрагмента независимо от остального абзаца?
Да, цвет текста, заливка и прозрачность на уровне IPortion могут отличаться от соседних фрагментов.