Получить границы текстовой части из презентаций в C++
Обзор
Текстовая часть представляет собой конкретный фрагмент текста внутри абзаца и позволяет работать с этим фрагментом независимо от окружающего содержимого. В Aspose.Slides части можно использовать, когда необходимо получить границы текстового фрагмента, применить форматирование только к части абзаца или управлять поведением текста на более детальном уровне.
В этой статье показано, как получить ограничивающий прямоугольник части, используя IPortion::GetRect. Также показано, как получить координаты начала части, используя IPortion::GetCoordinates. Кроме того, рассматриваются распространённые сценарии, связанные с частями, такие как применение гиперссылки к отдельному текстовому фрагменту, понимание того, как форматирование наследуется через часть, абзац, текстовый кадр и тему, а также обработка случаев, когда указанный шрифт недоступен.
Получение границ текстовой части
Используйте IPortion::GetRect для получения ограничивающего прямоугольника текстовой части:
auto presentation = System::MakeObject<Presentation>(u"Shapes.pptx");
auto slide = presentation->get_Slide(0);
auto shape = System::ExplicitCast<IAutoShape>(slide->get_Shape(0));
auto paragraphs = shape->get_TextFrame()->get_Paragraphs();
for (const auto& paragraph : paragraphs)
{
auto portions = paragraph->get_Portions();
for (const auto& portion : portions)
{
auto rectangle = portion->GetRect();
auto rectangleX = rectangle.get_X();
auto rectangleY = rectangle.get_Y();
auto rectangleWidth = rectangle.get_Width();
auto rectangleHeight = rectangle.get_Height();
Console::WriteLine(u"X = {0}; Y = {1}; Width = {2}; Height = {3}", rectangleX, rectangleY, rectangleWidth, rectangleHeight);
}
}
presentation->Dispose();
Получение координат текстовой части
Используйте IPortion::GetCoordinates для получения координат начала текстовой части:
auto presentation = System::MakeObject<Presentation>(u"Shapes.pptx");
auto slide = presentation->get_Slide(0);
auto shape = System::ExplicitCast<IAutoShape>(slide->get_Shape(0));
auto paragraphs = shape->get_TextFrame()->get_Paragraphs();
for (const auto& paragraph : paragraphs)
{
auto portions = paragraph->get_Portions();
for (const auto& portion : portions)
{
auto point = portion->GetCoordinates();
auto pointX = point.get_X();
auto pointY = point.get_Y();
Console::WriteLine(u"X = {0}; Y = {1}", pointX, pointY);
}
}
presentation->Dispose();
FAQ
Можно ли применить гиперссылку только к части текста внутри одного абзаца?
Да, вы можете назначить гиперссылку отдельной части; только этот фрагмент будет кликабельным, а не весь абзац.
Как работает наследование стилей: что переопределяет часть, а что берётся из абзаца или текстового кадра?
Свойства уровня части имеют наивысший приоритет. Если свойство не задано в IPortion, Aspose.Slides берёт его из IParagraph. Если оно не задано и там, Aspose.Slides использует стиль ITextFrame или theme.
Что происходит, если шрифт, указанный для части, отсутствует на целевой машине или сервере?
Правила подстановки шрифтов применяются. Текст может перераспределяться: метрики, переносы и ширина могут измениться, что актуально для точного позиционирования.
Можно ли задать прозрачность заливки текста или градиент, специфичные для части, независимо от остального абзаца?
Да, цвет текста, заливка и прозрачность на уровне IPortion могут отличаться от соседних фрагментов.