Hämta effektiva formsegenskaper från presentationer med Python

Översikt

Det här ämnet förklarar skillnaden mellan lokala och effektiva egenskaper. Lokala värden är värden som sätts direkt på en specifik formateringsnivå, till exempel:

  1. Delsegenskaper på en bild.
  2. Prototypformens textstilar på en layout‑ eller masternivå, när delens textramhållande form har en.
  3. Globala textinställningar i en presentation.

Lokala värden kan definieras eller utelämnas på vilken nivå som helst. När Aspose.Slides behöver den slutgiltiga ”som renderad” formateringen löser den arvskedjan och returnerar effektiva värden. Du kan hämta dem genom att anropa metoden get_effective på det lokala formatobjektet.

Följande exempel visar hur du får effektiva värden. Det förutsätter att den första formen på den första bilden är en AutoShape med en textram och minst en del.

import aspose.slides as slides

with slides.Presentation("sample.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()

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

Hämta effektiva egenskaper för en kamera

Aspose.Slides låter dig hämta effektiva egenskaper för en kamera. Typen ICameraEffectiveData representerar ett oföränderligt objekt som innehåller effektiva kameregenskaper. En ICameraEffectiveData‑instans exponeras via IThreeDFormatEffectiveData, som tillhandahåller effektiva värden för ThreeDFormat.

Följande kodexempel visar hur du får effektiva egenskaper för kameran. Det förutsätter att den första formen på den första bilden har 3D‑formatering.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]
    three_d_effective_data = shape.three_d_format.get_effective()
    camera = three_d_effective_data.camera

    camera_type = camera.camera_type
    field_of_view_angle = camera.field_of_view_angle
    zoom = camera.zoom

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

Hämta effektiva egenskaper för en ljusanordning

Aspose.Slides låter dig hämta effektiva egenskaper för en ljusanordning. Typen ILightRigEffectiveData representerar ett oföränderligt objekt som innehåller effektiva egenskaper för ljusanordningen. En ILightRigEffectiveData‑instans exponeras via IThreeDFormatEffectiveData, som tillhandahåller effektiva värden för ThreeDFormat.

Följande kodexempel visar hur du får effektiva egenskaper för ljusanordningen. Det förutsätter att den första formen på den första bilden har 3D‑formatering.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]
    three_d_effective_data = shape.three_d_format.get_effective()
    light_rig = three_d_effective_data.light_rig

    light_type = light_rig.light_type
    direction = light_rig.direction

    print("= Effective light rig properties =")
    print("Type: " + str(light_type))
    print("Direction: " + str(direction))

Hämta effektiva egenskaper för en fasettform

Aspose.Slides låter dig hämta effektiva egenskaper för en fasett på en form. Typen IShapeBevelEffectiveData representerar ett oföränderligt objekt som innehåller effektiva ansiktsreliefegenskaper för en form. En IShapeBevelEffectiveData‑instans exponeras via IThreeDFormatEffectiveData, som tillhandahåller effektiva värden för ThreeDFormat.

Följande kodexempel visar hur du får effektiva egenskaper för den övre fasetten på en form. Det förutsätter att den första formen på den första bilden har 3D‑formatering.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]
    three_d_effective_data = shape.three_d_format.get_effective()
    top_bevel = three_d_effective_data.bevel_top

    bevel_type = top_bevel.bevel_type
    bevel_width = top_bevel.width
    bevel_height = top_bevel.height

    print("= Effective shape's top face relief properties =")
    print("Type: " + str(bevel_type))
    print("Width: " + str(bevel_width))
    print("Height: " + str(bevel_height))

Hämta effektiva egenskaper för en textram

Med Aspose.Slides kan du hämta effektiva egenskaper för en textram. Typen ITextFrameFormatEffectiveData innehåller effektiva formateringsegenskaper för textram.

Följande kodexempel visar hur du får effektiva formateringsegenskaper för en textram. Det förutsätter att den första formen på den första bilden är en AutoShape med en textram.

import aspose.slides as slides

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

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

    anchoring_type = effective_text_frame_format.anchoring_type
    autofit_type = effective_text_frame_format.autofit_type
    text_vertical_type = effective_text_frame_format.text_vertical_type
    margin_left = effective_text_frame_format.margin_left
    margin_top = effective_text_frame_format.margin_top
    margin_right = effective_text_frame_format.margin_right
    margin_bottom = effective_text_frame_format.margin_bottom

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

Hämta effektiva egenskaper för en textstil

Med Aspose.Slides kan du hämta effektiva egenskaper för en textstil. Typen ITextStyleEffectiveData innehåller effektiva egenskaper för textstil.

Följande kodexempel visar hur du får effektiva egenskaper för en textstil. Det förutsätter att den första formen på den första bilden är en AutoShape med en textram.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]
    text_frame_format = shape.text_frame.text_frame_format
    text_style = text_frame_format.text_style
    effective_text_style = text_style.get_effective()
    level_count = 9

    for level_index in range(level_count):
        effective_style_level = effective_text_style.get_level(level_index)
        depth = effective_style_level.depth
        indent = effective_style_level.indent
        alignment = effective_style_level.alignment
        font_alignment = effective_style_level.font_alignment

        print("= Effective paragraph formatting for style level #" + str(level_index) + " =")

        print("Depth: " + str(depth))
        print("Indent: " + str(indent))
        print("Alignment: " + str(alignment))
        print("Font alignment: " + str(font_alignment))

Hämta det effektiva teckenhöjdsvärdet

Med Aspose.Slides kan du hämta den effektiva teckenhöjden. Följande kod visar hur en portions effektiva teckenhöjd förändras efter att lokala teckenhöjdsvärden har satts på olika nivåer i presentationsstrukturen.

import aspose.slides as slides

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

    paragraph = auto_shape.text_frame.paragraphs[0]
    paragraph.portions.clear()

    first_portion = slides.Portion("Sample text with first portion")
    second_portion = slides.Portion(" and second portion.")

    paragraph.portions.add(first_portion)
    paragraph.portions.add(second_portion)

    print("Effective font height just after creation:")
    first_portion_font_height = first_portion.portion_format.get_effective().font_height
    second_portion_font_height = second_portion.portion_format.get_effective().font_height
    print("Portion #0: " + str(first_portion_font_height))
    print("Portion #1: " + str(second_portion_font_height))

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

    print("Effective font height after setting the presentation default font height:")
    first_portion_font_height = first_portion.portion_format.get_effective().font_height
    second_portion_font_height = second_portion.portion_format.get_effective().font_height
    print("Portion #0: " + str(first_portion_font_height))
    print("Portion #1: " + str(second_portion_font_height))

    paragraph.paragraph_format.default_portion_format.font_height = 40

    print("Effective font height after setting paragraph default font height:")
    first_portion_font_height = first_portion.portion_format.get_effective().font_height
    second_portion_font_height = second_portion.portion_format.get_effective().font_height
    print("Portion #0: " + str(first_portion_font_height))
    print("Portion #1: " + str(second_portion_font_height))

    first_portion.portion_format.font_height = 55

    print("Effective font height after setting portion #0 font height:")
    first_portion_font_height = first_portion.portion_format.get_effective().font_height
    second_portion_font_height = second_portion.portion_format.get_effective().font_height
    print("Portion #0: " + str(first_portion_font_height))
    print("Portion #1: " + str(second_portion_font_height))

    second_portion.portion_format.font_height = 18

    print("Effective font height after setting portion #1 font height:")
    first_portion_font_height = first_portion.portion_format.get_effective().font_height
    second_portion_font_height = second_portion.portion_format.get_effective().font_height
    print("Portion #0: " + str(first_portion_font_height))
    print("Portion #1: " + str(second_portion_font_height))

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

Hämta den effektiva fyllningsformatet för en tabell

Med Aspose.Slides kan du hämta effektiv fyllningsformatering för olika tabelldelar. Typen IFillFormatEffectiveData innehåller effektiva fyllningsformateringsegenskaper. Cellformatering har högre prioritet än radformatering, radformatering har högre prioritet än kolumnformatering, och kolumnformatering har högre prioritet än tabell‑formatering för hela tabellen.

Som en följd av detta används egenskaper från ICellFormatEffectiveData för att rita tabellcellen. Följande kodexempel visar hur du får effektiv fyllningsformatering för olika tabelldelar. Det förutsätter att den första formen på den första bilden är en Table.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    table = presentation.slides[0].shapes[0]
    first_row = table.rows[0]
    first_column = table.columns[0]
    first_cell = first_row[0]

    table_format_effective = table.table_format.get_effective()
    row_format_effective = first_row.row_format.get_effective()
    column_format_effective = first_column.column_format.get_effective()
    cell_format_effective = first_cell.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

Returnerar get_effective ett ögonblicksavbild?

Ej alltid. Effektiva data representerar den beräknade formateringen efter att arv har tillämpats, men vissa effektiva dataobjekt kan cachelagras internt. Ett efterföljande anrop av get_effective kan omberäkna formateringen och uppdatera den cachelagrade datan, så ett tidigare erhållet objekt bör inte betraktas som en beständig ögonblicksavbild.

När bör jag läsa de effektiva egenskaperna igen?

Anropa get_effective igen efter att ha ändrat lokal formatering, föräldra‑stilar, layout‑formatering, master‑formatering eller standardinställningar på presentationsnivå. Nästa anrop utvärderar formateringshierarkin på nytt och returnerar det aktuella effektiva resultatet.

Påverkar ändring eller borttagning av en layout‑/masternivå de redan hämtade effektiva egenskaperna?

Ja, men förändringen visas vid nästa anrop av get_effective. Om en föräldra‑formateringskälla ändras eller tas bort kan tidigare erhållen effektiv data vara föråldrad. När get_effective anropas igen utvärderar Aspose.Slides formateringsträdet på nytt och de resulterande typsnitten, färgerna, storlekarna eller andra värden kan förändras.

Kan jag ändra värden via effektiva dataobjekt?

Nej. Effektiva dataobjekt visar beräknade värden. Gör förändringar i de lokala formateringsobjekten och hämta sedan de effektiva värdena igen.

Vad händer om en egenskap inte är satt på formnivå, varken i layout/master eller i globala inställningar?

Det effektiva värdet bestäms av standardmekanismen, som inkluderar PowerPoint‑ och Aspose.Slides‑standardvärden. Det lösta värdet blir en del av den aktuella effektiva datan.

Kan jag utifrån ett effektivt teckenvärde avgöra vilken nivå som tillhandahöll storleken eller teckensnittet?

Inte direkt. Effektiva data returnerar det slutgiltiga värdet. För att hitta källan, kontrollera de lokala värdena på del, stycke, textram och textstilar på layout‑, master‑ och presentationsnivå för att se var den första explicita definitionen förekommer.

Varför ser effektiva värden ibland identiska ut som de lokala?

Eftersom det lokala värdet visade sig vara det slutgiltiga (ingen högre nivå behövde ärvas). I sådana fall matchar det effektiva värdet det lokala.

När bör jag använda effektiva egenskaper och när bör jag bara arbeta med lokala?

Använd effektiva data när du behöver resultatet ”som renderas” efter att all arv har tillämpats, t.ex. för att justera färger, indrag eller storlekar. Om du behöver bevara dessa värden oavsett framtida formateringsändringar, kopiera de nödvändiga egenskaperna till ditt eget objekt. Om du behöver ändra formatering på en specifik nivå, modifiera lokala egenskaper och läs sedan, om det behövs, de effektiva data igen för att verifiera resultatet.