Получить эффективные свойства фигур из презентаций с Python

Обзор

В этой теме вы узнаете концепции effective и local свойств. Когда значения задаются непосредственно на следующих уровнях:

  1. В свойствах текстовой части на слайде.
  2. В стиле текста прототипной фигуры на макете или основном слайде (если у текстовой рамки есть стиль).
  3. В глобальных настройках текста презентации.

эти значения называют local значениями. На любом уровне local значения могут быть определены или опущены. Когда приложению необходимо определить, как должна выглядеть текстовая часть, оно использует effective значения. Вы можете получить эффективные значения, вызвав метод get_effective у локального формата.

Следующий пример показывает, как получить эффективные значения для формата текстовой рамки и формата текстовой части.

import aspose.slides as slides

with slides.Presentation("Presentation1.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

    local_text_frame_format = shape.text_frame.text_frame_format
    effective_text_frame_format = local_text_frame_format.get_effective()

    local_portion_format = shape.text_frame.paragraphs[0].portions[0].portion_format
    effective_portion_format = local_portion_format.get_effective()

Получить эффективные свойства камеры

Aspose.Slides for Python via .NET позволяет получать эффективные свойства камеры. Класс ICameraEffectiveData представляет неизменяемый объект, содержащий эти свойства. Экземпляр ICameraEffectiveData доступен через IThreeDFormatEffectiveData, который предоставляет эффективные значения для класса ThreeDFormat.

Следующий пример показывает, как получить эффективные свойства камеры:

import aspose.slides as slides

with slides.Presentation("Presentation1.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

	three_d_effective_data = shape.three_d_format.get_effective()

	print("= Effective camera properties =")
	print("Type:", str(three_d_effective_data.camera.camera_type))
	print("Field of view:", str(three_d_effective_data.camera.field_of_view_angle))
	print("Zoom:", str(three_d_effective_data.camera.zoom))

Получить эффективные свойства светового набора

Aspose.Slides for Python via .NET позволяет получать эффективные свойства светового набора. Класс ILightRigEffectiveData представляет неизменяемый объект, содержащий эти свойства. Экземпляр ILightRigEffectiveData доступен через IThreeDFormatEffectiveData, который предоставляет эффективные значения для класса ThreeDFormat.

Следующий пример показывает, как получить эффективные свойства светового набора:

import aspose.slides as slides

with slides.Presentation("Presentation1.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

	three_d_effective_data = shape.three_d_format.get_effective()

	print("= Effective light rig properties =")
	print("Type:", str(three_d_effective_data.light_rig.light_type))
	print("Direction:", str(three_d_effective_data.light_rig.direction))

Получить эффективные свойства кромки фигуры

Aspose.Slides for Python via .NET позволяет получать эффективные свойства кромки фигуры. Класс IShapeBevelEffectiveData представляет неизменяемый объект, содержащий свойства рельефа (кромки) фигуры. Экземпляр IShapeBevelEffectiveData доступен через IThreeDFormatEffectiveData, который предоставляет эффективные значения для класса ThreeDFormat.

Следующий пример показывает, как получить эффективные свойства кромки фигуры:

import aspose.slides as slides

with slides.Presentation("Presentation1.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

	three_d_effective_data = shape.three_d_format.get_effective()

	print("= Effective shape's top face relief properties =")
	print("Type:", str(three_d_effective_data.bevel_top.bevel_type))
	print("Width:", str(three_d_effective_data.bevel_top.width))
	print("Height:", str(three_d_effective_data.bevel_top.height))

Получить эффективные свойства текстовой рамки

С помощью Aspose.Slides for Python via .NET вы можете получить эффективные свойства текстовой рамки. Класс ITextFrameFormatEffectiveData содержит свойства эффективного форматирования текстовой рамки.

Следующий пример показывает, как получить свойства эффективного форматирования текстовой рамки:

import aspose.slides as slides

with slides.Presentation("Presentation1.pptx") as presentation:
	shape = presentation.slides[0].shapes[0]

	text_frame_format_effective_data = shape.text_frame.text_frame_format.get_effective()

	print("Anchoring type:", str(text_frame_format_effective_data.anchoring_type))
	print("Autofit type:", str(text_frame_format_effective_data.autofit_type))
	print("Text vertical type:", str(text_frame_format_effective_data.text_vertical_type))
	print("Margins")
	print("   Left:", str(text_frame_format_effective_data.margin_left))
	print("   Top:", str(text_frame_format_effective_data.margin_top))
	print("   Right:", str(text_frame_format_effective_data.margin_right))
	print("   Bottom:", str(text_frame_format_effective_data.margin_bottom))

Получить эффективные свойства стиля текста

С помощью Aspose.Slides for Python via .NET вы можете получить эффективные свойства стиля текста. Класс ITextStyleEffectiveData содержит свойства эффективного стиля текста.

Следующий пример показывает, как получить эффективные свойства стиля текста:

import aspose.slides as slides

with slides.Presentation("Presentation1.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

    effective_text_style = shape.text_frame.text_frame_format.text_style.get_effective()

    for i in range(8):
        effectiveStyleLevel = effective_text_style.get_level(i)
        print(f"= Effective paragraph formatting for style level #{str(i)} =")

        print("Depth:", str(effectiveStyleLevel.depth))
        print("Indent:", str(effectiveStyleLevel.indent))
        print("Alignment:", str(effectiveStyleLevel.alignment))
        print("Font alignment:", str(effectiveStyleLevel.font_alignment))

Получить эффективную высоту шрифта

С помощью Aspose.Slides for Python via .NET вы можете получить эффективную высоту шрифта. Приведённый ниже пример демонстрирует, как эффективная высота шрифта текстовой части меняется при установке локальных значений высоты шрифта на разных уровнях структуры презентации.

import aspose.slides as slides

with slides.Presentation() as presentation:
    shape = presentation.slides[0].shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 400, 75, False)

    shape.add_text_frame("")
    paragraph = shape.text_frame.paragraphs[0]

    portion0 = slides.Portion("Sample text with first portion")
    portion1 = slides.Portion(" and second portion.")

    paragraph.portions.add(portion0)
    paragraph.portions.add(portion1)

    print("Effective font height just after creation:")
    print("Portion #0:", portion0.portion_format.get_effective().font_height)
    print("Portion #1:", portion1.portion_format.get_effective().font_height)

    presentation.default_text_style.get_level(0).default_portion_format.font_height = 24

    print("Effective font height after setting entire presentation default font height:")
    print("Portion #0:", portion0.portion_format.get_effective().font_height)
    print("Portion #1:", portion1.portion_format.get_effective().font_height)

    paragraph.paragraph_format.default_portion_format.font_height = 40

    print("Effective font height after setting paragraph default font height:")
    print("Portion #0:", portion0.portion_format.get_effective().font_height)
    print("Portion #1:", portion1.portion_format.get_effective().font_height)

    paragraph.portions[0].portion_format.font_height = 55

    print("Effective font height after setting portion #0 font height:")
    print("Portion #0:", portion0.portion_format.get_effective().font_height)
    print("Portion #1:", portion1.portion_format.get_effective().font_height)

    paragraph.portions[1].portion_format.font_height = 18

    print("Effective font height after setting portion #1 font height:")
    print("Portion #0:", portion0.portion_format.get_effective().font_height)
    print("Portion #1:", portion1.portion_format.get_effective().font_height)

    presentation.save("SetLocalFontHeightValues.pptx",slides.export.SaveFormat.PPTX)

Получить эффективный формат заполнения таблицы

С помощью Aspose.Slides for Python via .NET вы можете получить эффективное форматирование заполнения для разных логических частей таблицы. Класс IFillFormatEffectiveData содержит свойства эффективного форматирования заполнения. Обратите внимание, что форматирование ячейки всегда имеет более высокий приоритет, чем форматирование строки, строка имеет более высокий приоритет, чем столбец, а столбец — чем вся таблица.

Следовательно, свойства ICellFormatEffectiveData в конечном итоге используются для отрисовки таблицы. Следующий пример показывает, как получить эффективное форматирование заполнения для разных уровней таблицы:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
	table = presentation.slides[0].shapes[0]

	table_format_effective = table.table_format.get_effective()
	row_format_effective = table.rows[0].row_format.get_effective()
	column_format_effective = table.columns[0].column_format.get_effective()
	cell_format_effective = table[0, 0].cell_format.get_effective()

	table_fill_format_effective = table_format_effective.fill_format
	row_fill_format_effective = row_format_effective.fill_format
	column_fill_format_effective = column_format_effective.fill_format
	cell_fill_format_effective = cell_format_effective.fill_format

FAQ

Как узнать, что я получил “снимок”, а не “живой объект”, и когда мне следует снова считывать эффективные свойства?

Объекты EffectiveData являются неизменяемыми снимками вычисленных значений на момент вызова. Если вы измените локальные или унаследованные настройки фигуры, получите эффективные данные повторно, чтобы получить обновлённые значения.

Влияет ли изменение макета/основного слайда на уже полученные эффективные свойства?

Да, но только после повторного чтения. Уже полученный объект EffectiveData не обновляется автоматически — запросите его снова после изменения макета или основного слайда.

Могу ли я изменять значения через EffectiveData?

Нет. EffectiveData только для чтения. Вносите изменения в локальные объекты форматирования (фигура/текст/3D и др.), а затем снова получайте эффективные значения.

Что происходит, если свойство не задано на уровне фигуры, макета/основного слайда или глобальных настроек?

Эффективное значение определяется механизмом значений по умолчанию (по умолчанию PowerPoint/Aspose.Slides). Это разрешённое значение становится частью снимка EffectiveData.

Можно ли по эффективному значению шрифта понять, какой уровень предоставил размер или гарнитуру?

Не напрямую. EffectiveData возвращает окончательное значение. Чтобы найти источник, проверьте локальные значения в части/абзаце/текстовой рамке и стили текста на уровне макета/основного слайда/презентации, чтобы увидеть, где появилось первое явное определение.

Почему значения EffectiveData иногда выглядят идентичными локальным?

Потому что локальное значение оказалось окончательным (не потребовалось наследование с более высокого уровня). В таких случаях эффективное значение совпадает с локальным.

Когда следует использовать эффективные свойства, а когда работать только с локальными?

Используйте EffectiveData, когда нужен результат “как отображается” после применения всего наследования (например, для согласования цветов, отступов или размеров). Если необходимо изменить форматирование на определённом уровне, изменяйте локальные свойства и при необходимости повторно считывайте EffectiveData для проверки результата.