Správa hlavních snímků prezentace v PHP
Přehled
slide master definuje sdílené nastavení návrhu pro skupinu snímků. Může obsahovat společné tvary, loga, pozadí, styly textu, nastavení motivu a nastavení zápatí. V PowerPointu je úprava slide master obvyklý způsob, jak udržet prezentaci konzistentní, aniž byste opakovali stejné formátování na každém snímku.
Aspose.Slides for PHP 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 rozvržení snímku. Normální snímky se obvykle nepřipojují přímo k hlavnímu snímku. Místo toho normální snímek používá rozvržení snímku, které patří k hlavnímu snímku.
Hierarchie je:
- Slide master – definuje sdílený návrh a motiv.
- Layout slide – definuje konkrétní uspořádání zástupných objektů a formátování úrovně rozvržení.
- Normal slide – obsahuje skutečný obsah prezentace a používá jedno rozvržení snímku.

V Aspose.Slides je hlavní snímek reprezentován třídou MasterSlide. Všechny hlavní snímky v prezentaci jsou dostupné prostřednictvím metody Presentation.getMasters, která vrací objekt MasterSlideCollection.
Dědičnost
Když je stejná vlastnost definována na více úrovních, vyhrává konkrétnější úroveň. Například pokud hlavní snímek i rozvržení snímku definují pozadí, snímky založené na tomto rozvržení použijí pozadí rozvržení. Další informace o rozvrženích snímků najdete v Apply or Change Slide Layouts.Přístup k Slide Masterům
V PowerPointu můžete otevřít zobrazení Slide Master přes View > Slide Master.

V Aspose.Slides použijte metodu getMasters pro přístup k hlavním snímkům:
$presentation = new Presentation("presentation.pptx");
try {
$firstMasterSlide = $presentation->getMasters()->get_Item(0);
$masterSlideCount = $presentation->getMasters()->size();
$firstMasterLayoutSlideCount = $firstMasterSlide->getLayoutSlides()->size();
echo "Master slides: " . $masterSlideCount . PHP_EOL;
echo "Layouts in the first master: " . $firstMasterLayoutSlideCount . PHP_EOL;
} finally {
$presentation->dispose();
}
Můžete také získat hlavní snímek použité normálním snímkem prostřednictvím jeho rozvržení:
$presentation = new Presentation("presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$layoutSlide = $slide->getLayoutSlide();
$masterSlide = $layoutSlide->getMasterSlide();
$masterSlideName = $masterSlide->getName();
echo $masterSlideName . PHP_EOL;
} finally {
$presentation->dispose();
}
Co obsahuje Slide Master
Hlavní snímek je objekt podobný snímku. Rozšiřuje BaseSlide, takže vystavuje mnoho stejných vlastností snímku používaných normálními a rozvrženými snímky. Členové specifické pro hlavní snímek jsou uvedeni na stránce API MasterSlide.
Mezi běžně používané členy hlavního snímku patří:
| Člen | Účel |
|---|---|
getBackground |
Nastavuje pozadí na úrovni hlavního snímku. |
getShapes |
Uchovává tvary umístěné na hlavním snímku, např. loga, rámy obrázků a sdílený text. |
getLayoutSlides |
Uchovává rozvržení snímků, která patří k hlavnímu snímku. |
getThemeManager |
Poskytuje přístup k API motivu hlavního snímku. |
getHeaderFooterManager |
Řídí záhlaví, zápatí, datum 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 skrze svá rozvržení. |
Přidání obrázku do Slide Masteru
Když přidáte obrázek do hlavního snímku, 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á logo na první hlavní snímek:
$presentation = new Presentation("presentation.pptx");
try {
$masterSlide = $presentation->getMasters()->get_Item(0);
$logoImage = Images::fromFile("logo.png");
try {
$presentationImage = $presentation->getImages()->addImage($logoImage);
} finally {
$logoImage->dispose();
}
$masterSlide->getShapes()->addPictureFrame(
ShapeType::Rectangle,
20,
20,
80,
80,
$presentationImage
);
$presentation->save("presentation-with-logo.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Další informace o rámečcích obrázků najdete v Picture Frame.
Řízení 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 mazali z hlavního snímku. Na snímku, který má tyto grafiky vynechat, předejte false metodě Slide::setShowMasterShapes a na snímcích, které je mají zobrazovat, ponechte true.
Následující samostatný příklad vytvoří modrý dekorativní pás na hlavním snímku a dva snímky používající stejné prázdné rozvržení. Pás je viditelný na prvním snímku a skrytý na druhém. Není potřeba žádná vstupní prezentace ani obrázek.
use aspose\slides\FillType;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SlideLayoutType;
$presentation = new Presentation();
try {
$masterSlide = $presentation->getMasters()->get_Item(0);
$layoutSlide = $masterSlide->getLayoutSlides()->getByType(SlideLayoutType::Blank);
$layoutSlide->setShowMasterShapes(true);
$slideHeight = java_values($presentation->getSlideSize()->getSize()->getHeight());
$band = $masterSlide->getShapes()->addAutoShape(ShapeType::Rectangle, 0, 0, 60, $slideHeight);
$bandColor = new Java("java.awt.Color", 70, 130, 180);
$band->getFillFormat()->setFillType(FillType::Solid);
$band->getFillFormat()->getSolidFillColor()->setColor($bandColor);
$band->getLineFormat()->getFillFormat()->setFillType(FillType::NoFill);
$visibleSlide = $presentation->getSlides()->get_Item(0);
$visibleSlide->setLayoutSlide($layoutSlide);
$visibleSlide->getShapes()->clear();
$hiddenSlide = $presentation->getSlides()->addEmptySlide($layoutSlide);
$visibleSlide->setShowMasterShapes(true);
$hiddenSlide->setShowMasterShapes(false);
$presentation->save("master-graphics.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Příklad používá rozvržení Blank dodané s novou prezentací a odstraňuje počáteční zástupné objekty snímku.
Zvolte rozsah nastavení
Normální snímek používá svého hlavního snímku přes Slide::getLayoutSlide a LayoutSlide::getMasterSlide. Nastavení vlastnosti na jednotlivém snímku ovlivní jen tento snímek. Předáním false metodě LayoutSlide::setShowMasterShapes skryjete grafiku hlavního snímku pro všechny snímky používající 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 ponechte rozvržení nezměněné.
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 metodě setShowMasterShapes vyvolá výjimku. Použijte ho na normálním snímku nebo na rozvržení.
Odlište grafiku od pozadí
| Operace | Efekt |
|---|---|
| Skrýt grafiku hlavního snímku | Řídí viditelnost zděděných tvarů hlavního snímku bez jejich mazání nebo změny tvarů snímku. |
| Změnit výplň pozadí snímku | 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. |
| Smazat tvar z hlavního snímku | Odstraní sdílený zdrojový tvar, takže už není dostupný žádnému snímku používajícímu tohoto hlavního snímku. |
Práce se zástupnými objekty
Zástupné objekty jsou obvykle definovány na rozvrženích snímků. Hlavní snímek poskytuje sdílený styl a motiv, který rozvržení dědí, zatímco každé rozvržení rozhoduje, které zástupné objekty jsou k dispozici a kde jsou umístěny.
V PowerPointu jsou příkazy pro zástupné objekty dostupné v zobrazení Slide Master.

Pro přidání nových zástupných objektů s Aspose.Slides pracujte s rozvržením snímku, které patří k hlavnímu snímku:
$presentation = new Presentation("presentation.pptx");
try {
$masterSlide = $presentation->getMasters()->get_Item(0);
$blankLayoutSlideName = "Custom Blank";
$blankLayoutSlide = $masterSlide->getLayoutSlides()->add(
SlideLayoutType::Blank,
$blankLayoutSlideName
);
$blankLayoutSlide->getPlaceholderManager()->addTextPlaceholder(
60,
120,
600,
80
);
$presentation->getSlides()->addEmptySlide($blankLayoutSlide);
$presentation->save("presentation-with-placeholder.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Můžete také formátovat tvary zástupných objektů, které již existují na hlavním snímku. Následující příklad najde zástupný objekt titulu a použije lineární gradientní výplň:
$presentation = new Presentation("presentation.pptx");
try {
$masterSlide = $presentation->getMasters()->get_Item(0);
$titlePlaceholder = findPlaceholder($masterSlide, PlaceholderType::Title);
if (!java_is_null($titlePlaceholder)) {
$redGradientColor = java("java.awt.Color")->RED;
$purpleGradientColor = new Java("java.awt.Color", 128, 0, 128);
$fillFormat = $titlePlaceholder->getFillFormat();
$fillFormat->setFillType(FillType::Gradient);
$gradientFormat = $fillFormat->getGradientFormat();
$gradientFormat->setGradientShape(GradientShape::Linear);
$gradientStops = $gradientFormat->getGradientStops();
$gradientStops->add(0, $redGradientColor);
$gradientStops->add(255, $purpleGradientColor);
}
$presentation->save("presentation-title-style.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
function findPlaceholder($masterSlide, $placeholderType)
{
$shapesCount = java_values($masterSlide->getShapes()->size());
for ($shapeIndex = 0; $shapeIndex < $shapesCount; $shapeIndex++) {
$shape = $masterSlide->getShapes()->get_Item($shapeIndex);
$placeholder = $shape->getPlaceholder();
if (!java_is_null($placeholder) && java_values($placeholder->getType()) == $placeholderType) {
return $shape;
}
}
return null;
}

Další možnosti formátování zástupných objektů a textu najdete v Set Prompt Text in Placeholder a Text Formatting.
Změna pozadí Slide Masteru
Pozadí hlavního snímku je zděděno rozvrženími a snímky, které ho nepřepisují. Následující příklad nastaví jednotnou barvu pozadí pro první hlavní snímek:
$presentation = new Presentation("presentation.pptx");
try {
$masterSlide = $presentation->getMasters()->get_Item(0);
$forestGreenColor = new Java("java.awt.Color", 34, 139, 34);
$background = $masterSlide->getBackground();
$background->setType(BackgroundType::OwnBackground);
$fillFormat = $background->getFillFormat();
$fillFormat->setFillType(FillType::Solid);
$fillFormat->getSolidFillColor()->setColor($forestGreenColor);
$presentation->save("presentation-master-background.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Pro související témata viz Presentation Background a Presentation Theme.
Klonování Slide Masteru do jiné prezentace
Použijte addClone z MasterSlideCollection k zkopí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.
$sourcePresentation = new Presentation("source.pptx");
$destinationPresentation = new Presentation("destination.pptx");
try {
$sourceMasterSlide = $sourcePresentation->getMasters()->get_Item(0);
$clonedMasterSlide = $destinationPresentation->getMasters()->addClone($sourceMasterSlide);
$destinationPresentation->save("destination-with-master.pptx", SaveFormat::Pptx);
} finally {
$destinationPresentation->dispose();
$sourcePresentation->dispose();
}
Pokud potřebujete klonovat normální snímky spolu s jejich hlavním snímkem, viz Clone Slides.
Přidání více Slide Masterů
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 zklonuje výchozí hlavní snímek, dá 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í:
$presentation = new Presentation("presentation.pptx");
try {
$defaultMasterSlide = $presentation->getMasters()->get_Item(0);
$sectionMasterSlide = $presentation->getMasters()->addClone($defaultMasterSlide);
$lightSteelBlueColor = new Java("java.awt.Color", 176, 196, 222);
$background = $sectionMasterSlide->getBackground();
$background->setType(BackgroundType::OwnBackground);
$fillFormat = $background->getFillFormat();
$fillFormat->setFillType(FillType::Solid);
$fillFormat->getSolidFillColor()->setColor($lightSteelBlueColor);
$sourceBlankLayout = $defaultMasterSlide->getLayoutSlides()->get_Item(0);
$sectionBlankLayout = $sectionMasterSlide->getLayoutSlides()->addClone($sourceBlankLayout);
$presentation->getSlides()->addEmptySlide($sectionBlankLayout);
$presentation->save("presentation-with-multiple-masters.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Porovnání Slide Masterů
Hlavní snímky lze porovnat metodou equals, která je zděděna od BaseSlide. Porovnání kontroluje strukturu a statický obsah, jako jsou tvary, text, formátování, animace a další nastavení snímku. Není porovnáváno jedinečné identifikátory, jako jsou ID snímků, ani dynamické hodnoty zástupných objektů, například aktuální datum.
$firstPresentation = new Presentation("first.pptx");
$secondPresentation = new Presentation("second.pptx");
try {
$firstPresentationMasterCount = java_values($firstPresentation->getMasters()->size());
$secondPresentationMasterCount = java_values($secondPresentation->getMasters()->size());
for ($firstMasterIndex = 0; $firstMasterIndex < $firstPresentationMasterCount; $firstMasterIndex++) {
for ($secondMasterIndex = 0; $secondMasterIndex < $secondPresentationMasterCount; $secondMasterIndex++) {
$firstMasterSlide = $firstPresentation->getMasters()->get_Item($firstMasterIndex);
$secondMasterSlide = $secondPresentation->getMasters()->get_Item($secondMasterIndex);
$areMasterSlidesEqual = $firstMasterSlide->equals($secondMasterSlide);
if ($areMasterSlidesEqual) {
echo "first.pptx master #" . $firstMasterIndex .
" equals second.pptx master #" . $secondMasterIndex . PHP_EOL;
}
}
}
} finally {
$secondPresentation->dispose();
$firstPresentation->dispose();
}
Další informace naleznete v Compare Presentation Slides.
Nastavení Slide Master View jako výchozího zobrazení
Použijte metodu setLastView na ViewProperties k ovládání pohledu, který PowerPoint otevře jako první. Následující příklad otevře prezentaci v zobrazení Slide Master:
$presentation = new Presentation("presentation.pptx");
try {
$presentation->getViewProperties()->setLastView(ViewType::SlideMasterView);
$presentation->save("presentation-master-view.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Další nastavení zobrazení najdete v Save Presentation.
Odstranění nepoužívaných Slide Masterů
Někdy prezentace obsahují hlavní snímky, které již žádný normální snímek nepoužívá. Odstranění nepoužívaných hlavních snímků může zmenšit velikost souboru a zjednodušit údržbu šablony.
Použijte removeUnused z MasterSlideCollection k odstranění nepoužívaných hlavních snímků ze sbírky getMasters:
$presentation = new 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 removeUnusedMasterSlides ze třídy Compress:
$presentation = new 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 slide master a layout slide?
Slide master definuje sdílené nastavení návrhu, jako je motiv, pozadí, společné tvary a styly textu. Layout slide patří k slide masteru a určuje konkrétní uspořádání zástupných objektů. Normální snímek používá layout slide, takže dědí jak z layoutu, tak ze slide masteru.
Může jedna prezentace obsahovat několik slide masterů?
Ano. Prezentace může obsahovat několik slide masterů. Použijte více masterů, když různé sekce potřebují odlišné vizuální systémy nebo značky.
Mám přidávat zástupné objekty na slide master nebo na layout slide?
Ve většině případů přidávejte zástupné objekty na layout slide. Na slide masteru umístěte sdílené vizuální prvky a společné formátování, poté na rozvržení umístěte obsahové zástupné objekty, které budou používat normální snímky.
Mohu smazat slide master, který je stále používán?
Ne. Slide master, který má závislé snímky, nelze bezpečně odstranit přímo. Nejprve přesuňte tyto snímky na rozvržení pod jiný slide master nebo použijte metodu pro úklid nepoužívaných masterů, která odstraňuje jen ty mastery, které nejsou v použití.