Gestire i Master delle Diapositive della Presentazione in PHP
Panoramica
Un slide master definisce le impostazioni di design condivise per un gruppo di diapositive. Può contenere forme comuni, loghi, sfondi, stili di testo, impostazioni del tema e impostazioni del piè di pagina. In PowerPoint, modificare un slide master è il metodo consueto per mantenere una presentazione coerente senza ripetere la stessa formattazione su ogni diapositiva.
Aspose.Slides per PHP via Java supporta lo stesso modello. Una presentazione può contenere una o più slide master, e ogni slide master può contenere diverse layout slide. Le diapositive normali di solito non fanno riferimento direttamente a una slide master. Invece, una diapositiva normale utilizza una layout slide, e quella layout slide appartiene a una slide master.
La gerarchia è:
- Slide master – definisce il design e il tema condivisi.
- Layout slide – definisce una disposizione specifica di segnaposti e formattazioni a livello di layout.
- Normal slide – contiene il contenuto effettivo della presentazione e utilizza una layout slide.

In Aspose.Slides, una slide master è rappresentata dalla classe MasterSlide. Tutte le slide master in una presentazione sono disponibili tramite il metodo Presentation.getMasters, che restituisce un oggetto MasterSlideCollection.
Ereditarietà
Quando la stessa proprietà è definita a più di un livello, prevale il livello più specifico. Per esempio, se una slide master e una layout slide definiscono entrambe uno sfondo, le diapositive basate su quel layout usano lo sfondo del layout. Per ulteriori informazioni sulle layout slide, vedere Applica o modifica layout diapositive.Accedere alle Slide Master
In PowerPoint, è possibile aprire la visualizzazione Slide Master da Visualizza > Slide Master.

In Aspose.Slides, utilizzare il metodo getMasters per accedere alle slide master:
$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();
}
È inoltre possibile ottenere la slide master usata da una diapositiva normale tramite il suo layout:
$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();
}
Cosa Contiene una Slide Master
Una slide master è un oggetto simile a una diapositiva. Estende BaseSlide, quindi espone molte delle stesse proprietà di diapositiva utilizzate da diapositive normali e layout. I membri specifici della master sono elencati nella pagina API MasterSlide.
I membri più comuni della slide master includono:
| Membro | Scopo |
|---|---|
getBackground |
Imposta lo sfondo della diapositiva a livello master. |
getShapes |
Contiene le forme posizionate sul master, come loghi, cornici di immagine e testo condiviso. |
getLayoutSlides |
Contiene le layout slide che appartengono al master. |
getThemeManager |
Fornisce l’accesso alle API del tema master. |
getHeaderFooterManager |
Controlla intestazioni, piè di pagina, date e numeri di diapositiva per il master e i suoi layout figli. |
getDependingSlides |
Restituisce le diapositive normali che dipendono dal master tramite i loro layout. |
Aggiungere un’Immagine a una Slide Master
Quando si aggiunge un’immagine a una slide master, essa appare nelle diapositive che usano layout appartenenti a quel master. Questo è utile per loghi, filigrane, bande decorative e altri elementi visivi ripetuti.
L’esempio seguente aggiunge un logo alla prima slide master:
$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();
}
Per ulteriori informazioni sulle cornici immagine, vedere Picture Frame.
Lavorare con i Segnaposti
I segnaposti sono normalmente definiti sulle layout slide. La slide master fornisce lo stile e il tema condivisi che quei layout ereditano, mentre ogni layout decide quali segnaposti sono disponibili e dove sono posizionati.
In PowerPoint, i comandi dei segnaposti sono disponibili nella visualizzazione Slide Master.

Per aggiungere nuovi segnaposti con Aspose.Slides, lavorare sulla layout slide che appartiene al master:
$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();
}
È inoltre possibile formattare le forme segnaposto già esistenti su una slide master. L’esempio seguente trova il segnaposto del titolo e applica un riempimento a gradiente lineare:
$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;
}

Per ulteriori opzioni di formattazione di segnaposti e testo, vedere Imposta testo di prompt nel segnaposto e Formattazione del testo.
Modificare lo Sfondo di una Slide Master
Uno sfondo master è ereditato da layout e diapositive che non lo sovrascrivono. L’esempio seguente imposta un colore di sfondo solido per la prima slide master:
$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();
}
Per argomenti correlati, vedere Presentation Background e Presentation Theme.
Clonare una Slide Master in un’Altra Presentazione
Utilizzare addClone da MasterSlideCollection per copiare una slide master in un’altra presentazione. Il master copiato può quindi essere usato da layout e diapositive nella presentazione di destinazione.
$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();
}
Se è necessario clonare le diapositive normali insieme al loro master, vedere Clone Slides.
Aggiungere più Slide Master
Una presentazione può contenere più slide master. Ciò è utile quando diverse sezioni richiedono branding, struttura di pagina o impostazioni del tema differenti.

L’esempio seguente clona il master predefinito, assegna al clone uno sfondo diverso, crea un layout sotto quel master clonato e aggiunge una nuova diapositiva basata su quel layout:
$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();
}
Confrontare le Slide Master
Le slide master possono essere confrontate con il metodo equals ereditato da BaseSlide. Il confronto verifica struttura e contenuto statico, come forme, testo, formattazione, animazioni e altre impostazioni della diapositiva. Non confronta identificatori unici, come gli ID delle diapositive, né valori dinamici dei segnaposti, come la data corrente.
$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();
}
Per ulteriori informazioni, vedere Confronta diapositive di presentazione.
Impostare la Vista Slide Master come Vista Predefinita
Utilizzare il metodo setLastView su ViewProperties per controllare la vista che PowerPoint apre per prima. L’esempio seguente apre la presentazione nella vista Slide Master:
$presentation = new Presentation("presentation.pptx");
try {
$presentation->getViewProperties()->setLastView(ViewType::SlideMasterView);
$presentation->save("presentation-master-view.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Per altre impostazioni della vista, vedere Save Presentation.
Rimuovere le Slide Master Inutilizzate
Le presentazioni a volte contengono slide master che non sono più utilizzate da alcuna diapositiva normale. Rimuovere i master inutilizzati può ridurre la dimensione del file e semplificare la manutenzione del modello.
Utilizzare removeUnused da MasterSlideCollection per rimuovere i master inutilizzati dalla collezione getMasters:
$presentation = new Presentation("presentation.pptx");
try {
$presentation->getMasters()->removeUnused(true);
$presentation->save("presentation-clean.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
È anche possibile utilizzare il metodo low‑code removeUnusedMasterSlides della classe Compress:
$presentation = new Presentation("presentation.pptx");
try {
Compress::removeUnusedMasterSlides($presentation);
$presentation->save("presentation-clean.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
FAQ
Qual è la differenza tra una slide master e una layout slide?
Una slide master definisce impostazioni di design condivise come tema, sfondo, forme comuni e stili di testo. Una layout slide appartiene a una slide master e definisce una disposizione specifica di segnaposti. Una diapositiva normale utilizza una layout slide, quindi eredita sia dal layout sia dal master.
Una presentazione può contenere più slide master?
Sì. Una presentazione può contenere più slide master. Utilizzare più master quando sezioni diverse richiedono sistemi visivi o branding differenti.
Devo aggiungere segnaposti a una slide master o a una layout slide?
Nella maggior parte dei casi, aggiungere i segnaposti alle layout slide. Posizionare gli elementi visivi condivisi e la formattazione comune sulla slide master, quindi inserire i segnaposti di contenuto sui layout che le diapositive normali utilizzeranno.
Posso eliminare una slide master ancora in uso?
No. Una slide master che ha diapositive dipendenti non può essere rimossa in modo sicuro direttamente. Spostare prima quelle diapositive su layout sotto un altro master, oppure utilizzare un metodo di pulizia dei master inutilizzati che rimuove solo i master non in uso.