Ottieni le proprietà efficaci delle forme dalle presentazioni con Python
Panoramica
Questo argomento spiega la differenza tra proprietà locali e efficaci. I valori locali sono valori impostati direttamente a un livello di formattazione specifico, ad esempio:
- Proprietà della porzione su una diapositiva.
- Stili di testo della forma prototipo in un layout o nella diapositiva master, quando la forma del riquadro di testo della porzione ne ha uno.
- Impostazioni globali del testo in una presentazione.
I valori locali possono essere definiti o omessi a qualsiasi livello. Quando Aspose.Slides necessita della formattazione finale “come resa”, risolve la catena di ereditarietà e restituisce i valori efficaci. È possibile ottenerli chiamando il metodo get_effective sull’oggetto di formattazione locale.
Il seguente esempio mostra come ottenere i valori efficaci. Si assume che la prima forma sulla prima diapositiva sia un AutoShape con un riquadro di testo e almeno una porzione.
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()
get_effective dopo aver modificato la formattazione genitore o ereditata può aggiornare i dati nella cache, e un oggetto precedentemente ottenuto potrebbe non rappresentare più lo stato precedente. Se è necessario conservare i valori efficaci per un utilizzo successivo, copiare le proprietà richieste, come altezza del carattere, colore di riempimento, stile del carattere o allineamento, nel proprio oggetto dati.
Ottenere le proprietà efficaci di una Camera
Aspose.Slides consente di ottenere le proprietà efficaci di una fotocamera. Il tipo ICameraEffectiveData rappresenta un oggetto immutabile che contiene le proprietà efficaci della fotocamera. Un’istanza di ICameraEffectiveData è esposta tramite IThreeDFormatEffectiveData, che fornisce valori efficaci per ThreeDFormat.
Il seguente esempio di codice mostra come ottenere le proprietà efficaci per la fotocamera. Si assume che la prima forma sulla prima diapositiva abbia una formattazione 3D.
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))
Ottenere le proprietà efficaci di un rig di luce
Aspose.Slides consente di ottenere le proprietà efficaci di un rig di luce. Il tipo ILightRigEffectiveData rappresenta un oggetto immutabile che contiene le proprietà efficaci del rig di luce. Un’istanza di ILightRigEffectiveData è esposta tramite IThreeDFormatEffectiveData, che fornisce valori efficaci per ThreeDFormat.
Il seguente esempio di codice mostra come ottenere le proprietà efficaci per il rig di luce. Si assume che la prima forma sulla prima diapositiva abbia una formattazione 3D.
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))
Ottenere le proprietà efficaci di una forma con smusso
Aspose.Slides consente di ottenere le proprietà efficaci di uno smusso di forma. Il tipo IShapeBevelEffectiveData rappresenta un oggetto immutabile che contiene le proprietà efficaci di rilievo della faccia per una forma. Un’istanza di IShapeBevelEffectiveData è esposta tramite IThreeDFormatEffectiveData, che fornisce valori efficaci per ThreeDFormat.
Il seguente esempio di codice mostra come ottenere le proprietà efficaci per lo smusso superiore di una forma. Si assume che la prima forma sulla prima diapositiva abbia una formattazione 3D.
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))
Ottenere le proprietà efficaci di un riquadro di testo
Utilizzando Aspose.Slides, è possibile ottenere le proprietà efficaci di un riquadro di testo. Il tipo ITextFrameFormatEffectiveData contiene le proprietà di formattazione efficaci del riquadro di testo.
Il seguente esempio di codice mostra come ottenere le proprietà di formattazione efficaci del riquadro di testo. Si assume che la prima forma sulla prima diapositiva sia un AutoShape con un riquadro di testo.
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))
Ottenere le proprietà efficaci di uno stile di testo
Utilizzando Aspose.Slides, è possibile ottenere le proprietà efficaci di uno stile di testo. Il tipo ITextStyleEffectiveData contiene le proprietà efficaci dello stile di testo.
Il seguente esempio di codice mostra come ottenere le proprietà efficaci dello stile di testo. Si assume che la prima forma sulla prima diapositiva sia un AutoShape con un riquadro di testo.
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))
Ottenere il valore efficace dell’altezza del carattere
Utilizzando Aspose.Slides, è possibile ottenere l’altezza efficace del carattere. Il codice seguente dimostra come l’altezza efficace del carattere di una porzione cambi dopo che i valori locali dell’altezza del carattere sono impostati a diversi livelli della struttura della presentazione.
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)
Ottenere il formato di riempimento efficace per una tabella
Utilizzando Aspose.Slides, è possibile ottenere la formattazione di riempimento efficace per diverse parti della tabella. Il tipo IFillFormatEffectiveData contiene le proprietà di formattazione di riempimento efficaci. La formattazione delle celle ha priorità maggiore rispetto alla formattazione delle righe, la formattazione delle righe ha priorità maggiore rispetto alla formattazione delle colonne, e la formattazione delle colonne ha priorità maggiore rispetto alla formattazione dell’intera tabella.
Di conseguenza, le proprietà di ICellFormatEffectiveData vengono utilizzate per disegnare la cella della tabella. Il seguente esempio di codice mostra come ottenere la formattazione di riempimento efficace per diverse parti della tabella. Si assume che la prima forma sulla prima diapositiva sia una 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
Restituisce get_effective un’istantanea?
Non sempre. I dati efficaci rappresentano la formattazione calcolata dopo l’applicazione dell’ereditarietà, ma alcuni oggetti di dati efficaci possono essere memorizzati nella cache internamente. Una chiamata successiva a get_effective può ricalcolare la formattazione e aggiornare i dati nella cache, quindi un oggetto ottenuto in precedenza non dovrebbe essere considerato un’istantanea duratura.
Quando dovrei leggere nuovamente le proprietà efficaci?
Richiama get_effective nuovamente dopo aver modificato la formattazione locale, gli stili genitore, la formattazione del layout, la formattazione master o le impostazioni predefinite a livello di presentazione. La chiamata successiva rivaluta la gerarchia della formattazione e restituisce il risultato efficace corrente.
Modificare o rimuovere una diapositiva layout/master influisce sulle proprietà efficaci già recuperate?
Sì, ma la modifica è riflessa nella successiva chiamata a get_effective. Se una fonte di formattazione genitore viene modificata o rimossa, i dati efficaci ottenuti in precedenza possono diventare obsoleti. Dopo aver richiamato nuovamente get_effective, Aspose.Slides rivaluta l’albero di formattazione e i caratteri, i colori, le dimensioni o altri valori risultanti possono cambiare.
Posso modificare i valori tramite gli oggetti di dati efficaci?
No. Gli oggetti di dati efficaci espongono i valori calcolati. Apporta le modifiche negli oggetti di formattazione locali, quindi ottieni nuovamente i valori efficaci.
Cosa succede se una proprietà non è impostata a livello di forma, né nel layout/master, né nelle impostazioni globali?
Il valore efficace è determinato dal meccanismo predefinito, che include le impostazioni predefinite di PowerPoint e Aspose.Slides. Quel valore risolto diventa parte dei dati efficaci correnti.
Da un valore efficace del carattere, posso capire a quale livello è stata fornita la dimensione o il tipo di carattere?
Non direttamente. I dati efficaci restituiscono il valore finale. Per trovare la fonte, verifica i valori locali nella porzione, nel paragrafo, nel riquadro di testo e negli stili di testo a livello di layout, master e presentazione per vedere dove appare la prima definizione esplicita.
Perché i valori efficaci a volte appaiono identici a quelli locali?
Perché il valore locale è risultato finale (non è stata necessaria alcuna ereditarietà a un livello superiore). In tali casi, il valore efficace corrisponde a quello locale.
Quando dovrei usare le proprietà efficaci e quando dovrei lavorare solo con quelle locali?
Utilizza i dati efficaci quando hai bisogno del risultato “come renderizzato” dopo l’applicazione di tutta l’ereditarietà, ad esempio per allineare colori, rientri o dimensioni. Se devi conservare tali valori indipendentemente dalle successive modifiche di formattazione, copia le proprietà richieste nel tuo oggetto. Se devi modificare la formattazione a un livello specifico, modifica le proprietà locali e quindi, se necessario, leggi nuovamente i dati efficaci per verificare il risultato.