Spravovat hlavní snímky prezentace v Pythonu přes Java
Přehled
Hlavní snímek definuje sdílená nastavení designu pro skupinu snímků. Může obsahovat společné tvary, loga, pozadí, styly textu, nastavení motivu a nastavení zápatí. V PowerPointu je úprava hlavního snímku obvyklý způsob, jak udržet prezentaci konzistentní, aniž by se opakovalo stejné formátování na každém snímku.
Aspose.Slides for Python via Java podporuje stejný model. Prezentace může obsahovat jeden nebo více hlavních snímků a každý hlavní snímek může obsahovat několik snímků rozvržení. Normální snímky se obvykle nepřipojují přímo k hlavnímu snímku. Místo toho normální snímek používá snímek rozvržení a tento snímek rozvržení patří k hlavnímu snímku.
Hierarchie je:
- Slide master – definuje sdílený design a motiv.
- Layout slide – definuje konkrétní uspořádání rezervovaných oblastí a formátování na úrovni rozvržení.
- Normal slide – obsahuje skutečný obsah prezentace a používá jeden snímek rozvržení.

V Aspose.Slides je hlavní snímek reprezentován třídou MasterSlide. Všechny hlavní snímky v prezentaci jsou dostupné přes kolekci Presentation.getMasters, která je reprezentována třídou MasterSlideCollection.
Inheritance
Když je stejná vlastnost definována na více úrovních, vítězí konkrétnější úroveň. Například pokud hlavní snímek a snímek rozvržení oba definují pozadí, snímky založené na tomto rozvržení používají pozadí rozvržení. Další informace o snímcích rozvržení najdete v Apply or Change Slide Layouts.Přístup k hlavním snímkům
V PowerPointu můžete otevřít zobrazení Slide Master z View > Slide Master.

V Aspose.Slides použijte kolekci Presentation.getMasters pro přístup k hlavním snímkům:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("presentation.pptx")
try:
first_master_slide = presentation.getMasters().get_Item(0)
master_slide_count = presentation.getMasters().size()
first_master_layout_slide_count = first_master_slide.getLayoutSlides().size()
print(f"Master slides: {master_slide_count}")
print(f"Layouts in the first master: {first_master_layout_slide_count}")
finally:
presentation.dispose()
Můžete také získat hlavní snímek použité normálním snímkem přes jeho rozvržení:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
presentation = Presentation("presentation.pptx")
try:
slide = presentation.getSlides().get_Item(0)
layout_slide = slide.getLayoutSlide()
master_slide = layout_slide.getMasterSlide()
master_slide_name = master_slide.getName()
print(master_slide_name)
finally:
presentation.dispose()
Co obsahuje hlavní snímek
Hlavní snímek je objekt podobný snímku. Dědí z BaseSlide, takže vystavuje mnoho stejných vlastností snímku používaných normálními a rozvržovacími snímky. Specifické členy hlavního snímku jsou uvedeny na stránce API MasterSlide.
Mezi často používané členy hlavního snímku patří:
| Member | Purpose |
|---|---|
| getBackground | Nastavuje pozadí snímku na úrovni hlavního snímku. |
| getShapes | Ukládá tvary umístěné na hlavním snímku, jako jsou loga, rámečky obrázků a sdílený text. |
| getLayoutSlides | Ukládá snímky rozvržení, které patří k hlavnímu snímku. |
| getThemeManager | Poskytuje přístup k API motivu hlavního snímku. |
| getHeaderFooterManager | Řídí záhlaví, zápatí, data a čísla snímků pro hlavní snímek a jeho podřízené rozvržení. |
| getDependingSlides | Vrací normální snímky, které závisí na hlavním snímku prostřednictvím jejich rozvržení. |
Přidání obrázku na hlavní snímek
Když přidáte obrázek na hlavní snímek, objeví se na snímcích, které používají rozvržení z tohoto hlavního snímku. To je užitečné pro loga, vodoznaky, dekorativní pásy a jiné opakující se vizuální prvky.
Následující příklad přidává logo na první hlavní snímek:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Images, Presentation, SaveFormat, ShapeType
presentation = Presentation("presentation.pptx")
try:
master_slide = presentation.getMasters().get_Item(0)
logo = Images.fromFile("logo.png")
try:
logo_image = presentation.getImages().addImage(logo)
master_slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 80, 80, logo_image)
finally:
logo.dispose()
presentation.save("presentation-with-logo.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Další informace o rámečcích obrázků najdete v Picture Frame.
Ovládání viditelnosti grafiky hlavního snímku
Použijte BaseSlide.setShowMasterShapes k skrytí zděděné grafiky hlavního snímku, jako jsou loga nebo dekorativní tvary, aniž byste je smazali z hlavního snímku. Při volání False na Slide.setShowMasterShapes na snímku, který by měl tyto grafiky vynechat, a ponechte True na snímcích, které je mají zobrazit.
Následující samostatný příklad vytváří modrý dekorativní pás na hlavním snímku a dvou snímcích, které používají stejné prázdné rozvržení. Pás je viditelný na prvním snímku a skrytý na druhém. Nevstupní prezentace ani obrázek nejsou vyžadovány.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat, ShapeType, SlideLayoutType
Color = jpype.JClass("java.awt.Color")
presentation = Presentation()
try:
master_slide = presentation.getMasters().get_Item(0)
layout_slide = master_slide.getLayoutSlides().getByType(SlideLayoutType.Blank)
layout_slide.setShowMasterShapes(True)
slide_height = jpype.JFloat(presentation.getSlideSize().getSize().getHeight())
band = master_slide.getShapes().addAutoShape(ShapeType.Rectangle, 0, 0, 60, slide_height)
band_color = Color(70, 130, 180)
band.getFillFormat().setFillType(FillType.Solid)
band.getFillFormat().getSolidFillColor().setColor(band_color)
band.getLineFormat().getFillFormat().setFillType(FillType.NoFill)
visible_slide = presentation.getSlides().get_Item(0)
visible_slide.setLayoutSlide(layout_slide)
visible_slide.getShapes().clear()
hidden_slide = presentation.getSlides().addEmptySlide(layout_slide)
visible_slide.setShowMasterShapes(True)
hidden_slide.setShowMasterShapes(False)
presentation.save("master-graphics.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Příklad používá rozvržení Blank, které je součástí nové prezentace, a odstraňuje vlastní rezervované oblasti úvodního snímku.
Zvolte rozsah nastavení
Normální snímek používá svůj hlavní snímek přes Slide.getLayoutSlide a LayoutSlide.getMasterSlide. Nastavení vlastnosti na jednotlivém snímku ovlivní jen tento snímek. Předání False do LayoutSlide.setShowMasterShapes skryje grafiku hlavního snímku pro snímky, které používají toto sdílené rozvržení, i když jejich vlastní nastavení je True. Pro skrytí grafiky jen na jednom snímku změňte vlastnost snímku a nechte sdílené rozvržení beze změny.
Nastavení není podporováno jako řízení viditelnosti přímo na hlavním snímku. Na hlavním snímku getShowMasterShapes vždy vrací False a předání True do setShowMasterShapes vyvolá výjimku. Použijte jej na normální snímek nebo na rozvržení.
Rozlišování grafiky od pozadí
| Operace | Výsledek |
|---|---|
| Hide master graphics | Řídí viditelnost zděděných tvarů hlavního snímku, aniž by je mazal nebo měnil vlastní tvary snímku. |
| Change the slide background fill | Mění barvu, gradient nebo obrázek pozadí. Grafika hlavního snímku je samostatný tvar a může zůstat viditelná nad tímto pozadím. Viz Presentation Background. |
| Delete a shape from the master | Odstraňuje sdílený zdrojový tvar, takže již není dostupný žádnému snímku používajícímu tento hlavní snímek. |
Práce s rezervovanými oblastmi
Rezervované oblasti jsou normálně definovány na snímcích rozvržení. Hlavní snímek poskytuje sdílený styl a motiv, který tyto rozvržení dědí, zatímco každé rozvržení rozhoduje, které rezervované oblasti jsou k dispozici a kde jsou umístěny.
V PowerPointu jsou příkazy rezervovaných oblastí k dispozici v zobrazení Slide Master.

Pro přidání nových rezervovaných oblastí s Aspose.Slides pracujte s rozvržením, které patří k hlavnímu snímku:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SlideLayoutType
presentation = Presentation("presentation.pptx")
try:
master_slide = presentation.getMasters().get_Item(0)
blank_layout_slide = master_slide.getLayoutSlides().getByType(SlideLayoutType.Blank)
if blank_layout_slide is None:
blank_layout_slide = master_slide.getLayoutSlides().add(SlideLayoutType.Blank, "Blank")
blank_layout_slide.getPlaceholderManager().addTextPlaceholder(60, 120, 600, 80)
presentation.getSlides().addEmptySlide(blank_layout_slide)
presentation.save("presentation-with-placeholder.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Můžete také formátovat tvary rezervovaných oblastí, které již na hlavním snímku existují. Následující příklad najde rezervovanou oblast nadpisu a aplikuje lineární gradientní výplň:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import AutoShape, FillType, GradientShape, PlaceholderType, Presentation, SaveFormat
Color = jpype.JClass("java.awt.Color")
presentation = Presentation("presentation.pptx")
try:
master_slide = presentation.getMasters().get_Item(0)
title_placeholder = None
for shape in master_slide.getShapes():
if isinstance(shape, AutoShape):
if shape.getPlaceholder() is not None and shape.getPlaceholder().getType() == PlaceholderType.Title:
title_placeholder = shape
break
if title_placeholder is not None:
red_gradient_color = Color(255, 0, 0)
purple_gradient_color = Color(128, 0, 128)
title_placeholder.getFillFormat().setFillType(FillType.Gradient)
title_placeholder.getFillFormat().getGradientFormat().setGradientShape(GradientShape.Linear)
title_placeholder.getFillFormat().getGradientFormat().getGradientStops().add(jpype.JFloat(0.0), red_gradient_color)
title_placeholder.getFillFormat().getGradientFormat().getGradientStops().add(jpype.JFloat(1.0), purple_gradient_color)
presentation.save("presentation-title-style.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()

Pro další možnosti formátování rezervovaných oblastí a textu viz Set Prompt Text in Placeholder a Text Formatting.
Změna pozadí hlavního snímku
Pozadí hlavního snímku je zděděno rozvrženími a snímky, které jej nepřepíší. Následující příklad nastavuje jednotnou barvu pozadí pro první hlavní snímek:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import BackgroundType, FillType, Presentation, SaveFormat
Color = jpype.JClass("java.awt.Color")
presentation = Presentation("presentation.pptx")
try:
master_slide = presentation.getMasters().get_Item(0)
master_background_color = Color.GREEN
master_slide.getBackground().setType(BackgroundType.OwnBackground)
master_slide.getBackground().getFillFormat().setFillType(FillType.Solid)
master_slide.getBackground().getFillFormat().getSolidFillColor().setColor(master_background_color)
presentation.save("presentation-master-background.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Pro související témata viz Presentation Background a Presentation Theme.
Klonování hlavního snímku do jiné prezentace
Použijte MasterSlideCollection.addClone ke kopírování hlavního snímku do jiné prezentace. Zkopírovaný hlavní snímek pak může být použit rozvrženími a snímky v cílové prezentaci.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
source_presentation = Presentation("source.pptx")
destination_presentation = Presentation("destination.pptx")
try:
source_master_slide = source_presentation.getMasters().get_Item(0)
cloned_master_slide = destination_presentation.getMasters().addClone(source_master_slide)
destination_presentation.save("destination-with-master.pptx", SaveFormat.Pptx)
finally:
source_presentation.dispose()
destination_presentation.dispose()
Pokud potřebujete klonovat normální snímky společně s jejich hlavním snímkem, viz Clone Slides.
Přidání více hlavních snímků
Prezentace může obsahovat více hlavních snímků. To je užitečné, když různé sekce vyžadují odlišné značení, strukturu stránek nebo nastavení motivu.

Následující příklad klonuje výchozí hlavní snímek, nastaví klonu jiné pozadí, vytvoří rozvržení pod tímto klonovaným hlavním snímkem a přidá nový snímek založený na tomto rozvržení:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import BackgroundType, FillType, Presentation, SaveFormat, SlideLayoutType
Color = jpype.JClass("java.awt.Color")
presentation = Presentation("presentation.pptx")
try:
default_master_slide = presentation.getMasters().get_Item(0)
section_master_slide = presentation.getMasters().addClone(default_master_slide)
section_master_background_color = Color.LIGHT_GRAY
section_master_slide.getBackground().setType(BackgroundType.OwnBackground)
section_master_slide.getBackground().getFillFormat().setFillType(FillType.Solid)
section_master_slide.getBackground().getFillFormat().getSolidFillColor().setColor(section_master_background_color)
source_blank_layout = default_master_slide.getLayoutSlides().getByType(SlideLayoutType.Blank)
if source_blank_layout is None:
source_blank_layout = default_master_slide.getLayoutSlides().get_Item(0)
section_blank_layout = section_master_slide.getLayoutSlides().addClone(source_blank_layout)
presentation.getSlides().addEmptySlide(section_blank_layout)
presentation.save("presentation-with-multiple-masters.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Porovnání hlavních snímků
Hlavní snímky lze porovnávat pomocí metody equals zděděné z BaseSlide. Porovnání kontroluje strukturu a statický obsah, jako jsou tvary, text, formátování, animace a další nastavení snímku. Neporovnává jedinečné identifikátory, jako jsou ID snímků, ani dynamické hodnoty rezervovaných oblastí, jako je aktuální datum.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation
first_presentation = Presentation("first.pptx")
second_presentation = Presentation("second.pptx")
try:
first_presentation_master_count = first_presentation.getMasters().size()
second_presentation_master_count = second_presentation.getMasters().size()
for first_master_index in range(first_presentation_master_count):
for second_master_index in range(second_presentation_master_count):
first_master_slide = first_presentation.getMasters().get_Item(first_master_index)
second_master_slide = second_presentation.getMasters().get_Item(second_master_index)
are_master_slides_equal = first_master_slide.equals(second_master_slide)
if are_master_slides_equal:
print(f"first.pptx master #{first_master_index} equals second.pptx master #{second_master_index}")
finally:
first_presentation.dispose()
second_presentation.dispose()
Pro více informací viz Compare Presentation Slides.
Nastavení zobrazení hlavního snímku jako výchozího zobrazení
Použijte metodu setLastView na ViewProperties k řízení zobrazení, které PowerPoint otevře jako první. Následující příklad otevírá prezentaci v zobrazení Slide Master:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, ViewType
presentation = Presentation("presentation.pptx")
try:
presentation.getViewProperties().setLastView(ViewType.SlideMasterView)
presentation.save("presentation-master-view.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Pro další nastavení zobrazení viz Save Presentation.
Odstranění nepoužívaných hlavních snímků
Prezentace někdy obsahují hlavní snímky, které již žádný normální snímek nepoužívá. Odstranění nepoužívaných hlavních snímků může snížit velikost souboru a zjednodušit správu šablon.
Použijte removeUnused k odstranění nepoužívaných hlavních snímků z kolekce Presentation.getMasters:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
presentation.getMasters().removeUnused(True)
presentation.save("presentation-clean.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Můžete také použít low‑code metodu Compress.removeUnusedMasterSlides:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Compress, Presentation, SaveFormat
presentation = Presentation("presentation.pptx")
try:
Compress.removeUnusedMasterSlides(presentation)
presentation.save("presentation-clean.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Často kladené otázky
Jaký je rozdíl mezi hlavním snímkem a snímkem rozvržení?
Hlavní snímek definuje sdílená nastavení designu, jako je motiv, pozadí, společné tvary a styly textu. Snímek rozvržení patří k hlavnímu snímku a určuje konkrétní uspořádání rezervovaných oblastí. Normální snímek používá snímek rozvržení, takže dědí jak z rozvržení, tak z hlavního snímku.
Může jedna prezentace obsahovat několik hlavních snímků?
Ano. Prezentace může obsahovat několik hlavních snímků. Používejte více hlavních snímků, když různé sekce potřebují odlišné vizuální systémy nebo značení.
Mám přidávat rezervované oblasti na hlavní snímek nebo na snímek rozvržení?
Ve většině případů přidávejte rezervované oblasti na snímky rozvržení. Sdílené vizuální prvky a formátování umístěte na hlavní snímek a obsahové rezervované oblasti na rozvržení, která budou používat normální snímky.
Mohu smazat hlavní snímek, který je stále používán?
Ne. Hlavní snímek, který má závislé snímky, nelze bezpečně odstranit přímo. Nejprve přesuňte tyto snímky na rozvržení pod jiný hlavní snímek nebo použijte metodu pro úklid nepoužívaných hlavních snímků, která odstraní pouze hlavní snímky, které nejsou použity.