Получить границы текстового фрагмента из презентаций в PHP
Обзор
Текстовый фрагмент представляет собой конкретный отрывок текста внутри абзаца и позволяет работать с этим отрывком независимо от окружающего содержимого. В Aspose.Slides фрагменты могут использоваться, когда нужно получить границы текстового отрывка, применить форматирование только к части абзаца или управлять поведением текста на более детальном уровне.
В этой статье показано, как получить ограничивающий прямоугольник фрагмента, используя Portion::getRect. Также показано, как получить координаты начала фрагмента, используя Portion::getCoordinates. Кроме того, рассматриваются типичные сценарии, связанные с фрагментами, такие как применение гиперссылки к отдельному текстовому отрывку, понимание того, как форматирование разрешается через уровень фрагмента, абзаца, текстового кадра и наследование темы, а также обработка случаев, когда указанный шрифт недоступен.
Получить границы текстового фрагмента
Используйте Portion::getRect для получения ограничивающего прямоугольника текстового фрагмента:
$presentation = new Presentation("Shapes.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->get_Item(0);
foreach ($shape->getTextFrame()->getParagraphs() as $paragraph) {
foreach ($paragraph->getPortions() as $portion) {
$rectangle = $portion->getRect();
$rectangleX = java_values($rectangle->getX());
$rectangleY = java_values($rectangle->getY());
$rectangleWidth = java_values($rectangle->getWidth());
$rectangleHeight = java_values($rectangle->getHeight());
echo("X = " . $rectangleX . "; Y = " . $rectangleY . "; Width = " . $rectangleWidth . "; Height = " . $rectangleHeight);
}
}
} finally {
$presentation->dispose();
}
Получить координаты текстового фрагмента
Используйте Portion::getCoordinates для получения координат начала текстового фрагмента:
$presentation = new Presentation("Shapes.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->get_Item(0);
foreach ($shape->getTextFrame()->getParagraphs() as $paragraph) {
foreach ($paragraph->getPortions() as $portion) {
$point = $portion->getCoordinates();
$pointX = java_values($point->getX());
$pointY = java_values($point->getY());
echo("X = " . $pointX . "; Y = " . $pointY);
}
}
} finally {
$presentation->dispose();
}
Вопросы и ответы
Можно ли применить гиперссылку только к части текста внутри одного абзаца?
Да, вы можете присвоить гиперссылку отдельному фрагменту; только этот отрывок будет кликабельным, а не весь абзац.
Как работает наследование стилей: что переопределяет фрагмент, а что берётся из абзаца или текстового кадра?
Свойства уровня фрагмента имеют наивысший приоритет. Если свойство не задано у Portion, Aspose.Slides берёт его из Paragraph. Если оно не задано и там, Aspose.Slides использует стиль из TextFrame или theme.
Что происходит, если указанный для фрагмента шрифт отсутствует на целевой машине или сервере?
Правила подстановки шрифтов применяются. Текст может перераспределиться: метрики, переносы и ширина могут измениться, что важно для точного позиционирования.
Могу ли я задать прозрачность заливки текста или градиент для конкретного фрагмента независимо от остального абзаца?
Да, цвет текста, заливка и прозрачность на уровне Portion могут отличаться от соседних фрагментов.