Получить границы абзаца из презентаций в Python
Обзор
Эта статья объясняет, как получить границы, размер и координаты абзацев в Aspose.Slides. В ней показано, как извлечь прямоугольник абзаца из TextFrame с помощью Paragraph.get_rect, как получить координаты абзаца внутри текстового кадра ячейки таблицы и выделены важные детали, такие как единицы измерения, влияние переноса текста на границы, преобразование в пиксели и эффективные параметры форматирования абзаца.
Получение прямоугольных координат абзаца
Используйте Paragraph.get_rect для получения ограничивающего прямоугольника абзаца.
import aspose.slides as slides
with slides.Presentation("Shapes.pptx") as presentation:
slide = presentation.slides[0]
shape = slide.shapes[0]
paragraph = shape.text_frame.paragraphs[0]
rectangle = paragraph.get_rect()
Получение размера абзаца внутри текстового кадра ячейки таблицы
Чтобы получить размер и координаты Paragraph в текстовом кадре ячейки таблицы, используйте Paragraph.get_rect. Возвращаемый прямоугольник задаётся относительно текстового кадра ячейки таблицы, поэтому при необходимости координат уровня слайда добавьте позицию таблицы и смещение ячейки.
Следующий пример получает границы абзаца внутри ячейки таблицы и рисует прямоугольники на слайде для визуализации этих границ:
import aspose.slides as slides
import aspose.pydrawing as draw
with slides.Presentation("source.pptx") as presentation:
slide = presentation.slides[0]
table = slide.shapes[0]
cell = table.rows[1][1]
cell_x = table.x + cell.offset_x
cell_y = table.y + cell.offset_y
for paragraph in cell.text_frame.paragraphs:
if paragraph.text == "":
continue
paragraph_rectangle = paragraph.get_rect()
paragraph_rectangle_x = paragraph_rectangle.x + cell_x
paragraph_rectangle_y = paragraph_rectangle.y + cell_y
paragraph_bounds_shape = slide.shapes.add_auto_shape(
slides.ShapeType.RECTANGLE,
paragraph_rectangle_x,
paragraph_rectangle_y,
paragraph_rectangle.width,
paragraph_rectangle.height)
paragraph_bounds_shape.fill_format.fill_type = slides.FillType.NO_FILL
paragraph_bounds_shape.line_format.fill_format.solid_fill_color.color = draw.Color.yellow
paragraph_bounds_shape.line_format.fill_format.fill_type = slides.FillType.SOLID
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
FAQ
В каких единицах измеряются координаты абзаца?
Они измеряются в пунктах, где 1 дюйм равен 72 пунктам. Это относится ко всем координатам и размерам на слайде.
Влияет ли перенос слов на границы абзаца?
Да. Если для TextFrame включён TextFrameFormat.wrap_text, текст переносится, чтобы поместиться в ширину области, что изменяет фактические границы абзаца.
Можно ли надежно сопоставить координаты абзаца пиксельным значениям в экспортированном изображении?
Да. Преобразуйте пункты в пиксели по формуле: пиксели = пункты × (DPI / 72). Результат зависит от выбранного DPI для рендеринга или экспорта.
Как получить «эффективные» параметры форматирования абзаца с учётом наследования стилей?
Используйте effective paragraph formatting data structure; он возвращает окончательные консолидированные значения отступов, интервалов, переноса, RTL и т. д.