Получить границы абзаца из презентаций в Python через Java
Обзор
Эта статья объясняет, как получить границы, размер и координаты абзацев в Aspose.Slides. Она показывает, как получить прямоугольник абзаца из Текстовый кадр с помощью Paragraph.getRect, как получить координаты абзаца внутри текстового кадра ячейки таблицы и выделяет важные детали, такие как единицы измерения, влияние переноса текста на границы, преобразование в пиксели и значения эффективного форматирования абзаца.
Получить прямоугольные координаты абзаца
Используйте Paragraph.getRect, чтобы получить ограничивающий прямоугольник абзаца.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("Shapes.pptx")
try:
slide = presentation.getSlides().get_Item(0)
shape = slide.getShapes().get_Item(0)
paragraph = shape.getTextFrame().getParagraphs().get_Item(0)
rectangle = paragraph.getRect()
finally:
presentation.dispose()
Получить размер абзаца внутри текстового кадра ячейки таблицы
Чтобы получить размер и координаты Paragraph в текстовом кадре ячейки таблицы, используйте Paragraph.getRect. Возвращаемый прямоугольник относителен к текстовому кадру ячейки таблицы, поэтому при необходимости координат уровня слайда добавьте позицию таблицы и смещение ячейки.
Следующий пример получает границы абзаца внутри ячейки таблицы и рисует прямоугольники на слайде для визуализации этих границ:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat, ShapeType
from java.awt import Color
presentation = Presentation("source.pptx")
try:
slide = presentation.getSlides().get_Item(0)
table = slide.getShapes().get_Item(0)
cell = table.getRows().get_Item(1).get_Item(1)
cell_x = table.getX() + cell.getOffsetX()
cell_y = table.getY() + cell.getOffsetY()
for paragraph in cell.getTextFrame().getParagraphs():
if not paragraph.getText():
continue
paragraph_rectangle = paragraph.getRect()
paragraph_rectangle_x = paragraph_rectangle.x + cell_x
paragraph_rectangle_y = paragraph_rectangle.y + cell_y
paragraph_bounds_shape = slide.getShapes().addAutoShape(ShapeType.Rectangle, paragraph_rectangle_x, paragraph_rectangle_y, paragraph_rectangle.width, paragraph_rectangle.height)
paragraph_bounds_shape.getFillFormat().setFillType(FillType.NoFill)
paragraph_bounds_shape.getLineFormat().getFillFormat().getSolidFillColor().setColor(Color.YELLOW)
paragraph_bounds_shape.getLineFormat().getFillFormat().setFillType(FillType.Solid)
presentation.save("output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Часто задаваемые вопросы
В каких единицах измеряются координаты абзаца?
Они измеряются в пунктах, где 1 дюйм равно 72 пунктам. Это относится ко всем координатам и размерам на слайде.
Влияет ли перенос слов на границы абзаца?
Да. Если для TextFrame включено TextFrameFormat.setWrapText, текст разбивается, чтобы вписаться в ширину области, что меняет фактические границы абзаца.
Можно ли надежно сопоставить координаты абзаца с пикселями в экспортированном изображении?
Да. Преобразуйте пункты в пиксели по формуле: пиксели = пункты × (DPI / 72). Результат зависит от выбранного DPI для рендеринга или экспорта.
Как получить «эффективные» параметры форматирования абзаца с учётом наследования стилей?
Используйте структуру данных эффективного форматирования абзаца; она возвращает окончательные объединённые значения отступов, интервалов, переноса, RTL и прочего.