Applicare o modificare i layout delle diapositive in PHP

Panoramica

Un layout di diapositiva definisce le posizioni e la formattazione dei segnaposto come titoli, testo, immagini, grafici e tabelle. Applicare un layout conferisce alle diapositive una struttura coerente consentendo a ciascuna diapositiva di contenere il proprio contenuto.

I layout più comuni includono:

  • Title Slide: Contiene segnaposto per titolo e sottotitolo.
  • Title and Content: Contiene un segnaposto per il titolo e un segnaposto di contenuto generico.
  • Blank: Non contiene segnaposti di contenuto ed è utile quando ogni forma sarà posizionata manualmente.

Comprendere l’Eredità dei Layout

Una presentazione ha tre livelli correlati:

  1. Una master slide definisce il tema, la formattazione condivisa, gli sfondi e gli oggetti comuni.
  2. Una layout slide appartiene a un master e definisce una particolare disposizione dei segnaposto.
  3. Una normal slide utilizza un layout e memorizza il contenuto inserito per quella diapositiva.

Una normal slide eredita il tema e la formattazione dal suo layout, e il layout eredita dal suo master. Un valore impostato direttamente su una normal slide sovrascrive il valore ereditato a quel livello. Quando una normal slide viene creata, le sue forme segnaposto vengono generate dal layout selezionato, mentre il contenuto inserito in quei segnaposto appartiene alla normal slide.

Aggiungi i segnaposto richiesti a un layout prima di creare diapositive da esso. L’aggiunta successiva di un altro segnaposto a un layout non aggiunge automaticamente una forma segnaposto corrispondente alle diapositive normali esistenti.

Questa relazione ha due importanti conseguenze:

  • Modificare la formattazione ereditata o la geometria dei segnaposto esistenti su un layout può aggiornare tutte le diapositive che dipendono da esso. Prima di modificare un layout già in uso, controlla le diapositive dipendenti e revisiona la presentazione risultante.
  • Un layout ancora utilizzato da una diapositiva non può essere rimosso. Riassegna prima le sue diapositive dipendenti a un altro layout, oppure rimuovi solo i layout inutilizzati.

Per ulteriori informazioni sul livello superiore di questa gerarchia, vedere Slide Master.

Per nascondere loghi ereditati o forme decorative del master su una singola diapositiva o attraverso un layout condiviso, vedere Control the Visibility of Master Graphics. L’esempio confronta due diapositive che usano lo stesso master.

Selezionare e Applicare un Layout di Diapositiva

Usa un tipo di layout quando la presentazione segue le definizioni standard dei layout di PowerPoint. I nomi dei layout sono modificabili dall’utente e possono essere localizzati, quindi la selezione basata sul nome è meno affidabile a meno che non si controlli il modello di origine.

L’esempio seguente cerca Title and Content nel primo master. Se quel layout non è disponibile, ricade deliberatamente su Blank. Il secondo controllo null è necessario perché una presentazione può contenere solo layout personalizzati. Il layout selezionato viene quindi applicato alla prima normal slide tramite il metodo Slide.setLayoutSlide.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SlideLayoutType;

$presentation = new Presentation("input.pptx");
try {
    $layoutSlides = $presentation->getMasters()->get_Item(0)->getLayoutSlides();
    $targetLayout = $layoutSlides->getByType(SlideLayoutType::TitleAndObject);

    if (java_is_null($targetLayout)) {
        $targetLayout = $layoutSlides->getByType(SlideLayoutType::Blank);
    }

    if (java_is_null($targetLayout)) {
        throw new \RuntimeException("The first master does not contain a suitable layout slide.");
    }

    $presentation->getSlides()->get_Item(0)->setLayoutSlide($targetLayout);
    $presentation->save("output-with-new-layout.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Modificare il layout di una diapositiva non rimuove le forme ordinarie aggiunte direttamente alla diapositiva. Tuttavia, le posizioni dei segnaposto, la formattazione ereditata e la corrispondenza tra i segnaposto esistenti e il nuovo layout possono cambiare, quindi verifica l’output quando passi da layout sostanzialmente diversi.

Aggiungere una Diapositiva Layout

La selezione e la creazione sono operazioni separate. L’esempio precedente seleziona un layout esistente; non ne crea uno. Per creare un layout, chiama il metodo MasterLayoutSlideCollection.add sulla collezione di layout del master di destinazione.

L’esempio seguente aggiunge sempre un nuovo layout Title and Content denominato Report Title and Content, quindi aggiunge una normal slide basata su di esso. I nomi dei layout devono essere univoci all’interno della collezione.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SlideLayoutType;

$presentation = new Presentation("input.pptx");
try {
    $masterSlide = $presentation->getMasters()->get_Item(0);
    $reportLayout = $masterSlide->getLayoutSlides()->add(SlideLayoutType::TitleAndObject, "Report Title and Content");
    $presentation->getSlides()->addEmptySlide($reportLayout);

    $presentation->save("output-with-report-layout.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Aggiungi un layout solo quando il modello ha realmente bisogno di un’altra struttura riutilizzabile. Se esiste già un layout adatto, selezionalo e riusalo invece di crearne un duplicato.

Aggiungere Segnaposto a una Diapositiva Layout

Il metodo LayoutSlide.getPlaceholderManager fornisce un LayoutPlaceholderManager per aggiungere forme segnaposto a un layout.

Segnaposto PowerPoint LayoutPlaceholderManager Method
Contenuto addContentPlaceholder(float x, float y, float width, float height)
Contenuto (Verticale) addVerticalContentPlaceholder(float x, float y, float width, float height)
Testo addTextPlaceholder(float x, float y, float width, float height)
Testo (Verticale) addVerticalTextPlaceholder(float x, float y, float width, float height)
Immagine addPicturePlaceholder(float x, float y, float width, float height)
Grafico addChartPlaceholder(float x, float y, float width, float height)
Tabella addTablePlaceholder(float x, float y, float width, float height)
SmartArt addSmartArtPlaceholder(float x, float y, float width, float height)
Media addMediaPlaceholder(float x, float y, float width, float height)
Immagine Online addOnlineImagePlaceholder(float x, float y, float width, float height)

L’esempio seguente verifica che il layout Blank esista, aggiunge quattro segnaposto a esso e poi crea una normal slide che utilizza il layout modificato. L’ordine è intenzionale: i segnaposto vengono aggiunti prima della creazione della normal slide, così Aspose.Slides può generare le forme segnaposto corrispondenti su quella diapositiva.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SlideLayoutType;

$presentation = new Presentation();
try {
    $blankLayout = $presentation->getLayoutSlides()->getByType(SlideLayoutType::Blank);

    if (java_is_null($blankLayout)) {
        throw new \RuntimeException("The presentation does not contain a Blank layout slide.");
    }

    $placeholderManager = $blankLayout->getPlaceholderManager();
    $placeholderManager->addContentPlaceholder(20, 20, 310, 270);
    $placeholderManager->addVerticalTextPlaceholder(350, 20, 350, 270);
    $placeholderManager->addChartPlaceholder(20, 310, 310, 180);
    $placeholderManager->addTablePlaceholder(350, 310, 350, 180);

    $presentation->getSlides()->addEmptySlide($blankLayout);
    $presentation->save("output-with-placeholders.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Il risultato:

I segnaposti sulla diapositiva layout

Rimuovere Diapositive Layout Inutilizzate

Usa il metodo Compress.removeUnusedLayoutSlides per rimuovere i layout a cui non fa riferimento alcuna normal slide. Il metodo lascia intatti i layout ancora in uso.

use aspose\slides\Compress;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("input.pptx");
try {
    Compress::removeUnusedLayoutSlides($presentation);
    $presentation->save("output-without-unused-layouts.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Per rimuovere uno specifico layout, usa prima il suo metodo hasDependingSlides o getDependingSlides. Riassegna le diapositive dipendenti prima di chiamare LayoutSlide.remove. Tentare di rimuovere un layout in uso genera una PptxEditException.

Controllare la Visibilità del Piè di Pagina su una Diapositiva Layout

Un layout ha i propri segnaposto per piè di pagina, numero diapositiva e data/ora. Usa il metodo LayoutSlide.getHeaderFooterManager per controllare questi segnaposto per un singolo layout. È utile, ad esempio, quando i layout di contenuto devono mostrare i piè di pagina ma i layout di titolo no.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\SlideLayoutType;

$presentation = new Presentation("input.pptx");
try {
    $layoutSlide = $presentation->getLayoutSlides()->getByType(SlideLayoutType::TitleAndObject);

    if (java_is_null($layoutSlide)) {
        $layoutSlide = $presentation->getLayoutSlides()->getByType(SlideLayoutType::Blank);
    }

    if (java_is_null($layoutSlide)) {
        throw new \RuntimeException("The presentation does not contain a suitable layout slide.");
    }

    $headerFooterManager = $layoutSlide->getHeaderFooterManager();
    $headerFooterManager->setFooterVisibility(true);
    $headerFooterManager->setSlideNumberVisibility(true);
    $headerFooterManager->setDateTimeVisibility(true);
    $headerFooterManager->setFooterText("Footer text");
    $headerFooterManager->setDateTimeText("Date and time text");

    $presentation->save("output-with-layout-footers.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Controllare la Visibilità del Piè di Pagina su un Master e sui Suoi Layout Figlio

Per applicare impostazioni di piè di pagina coerenti su tutta la gerarchia del master, usa il metodo MasterSlide.getHeaderFooterManager. I metodi di propagazione di MasterSlideHeaderFooterManager operano sul master e sui suoi layout dipendenti e sulle diapositive normali; non hanno effetto su una singola diapositiva normale.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("input.pptx");
try {
    $headerFooterManager = $presentation->getMasters()->get_Item(0)->getHeaderFooterManager();
    $headerFooterManager->setFooterAndChildFootersVisibility(true);
    $headerFooterManager->setSlideNumberAndChildSlideNumbersVisibility(true);
    $headerFooterManager->setDateTimeAndChildDateTimesVisibility(true);
    $headerFooterManager->setFooterAndChildFootersText("Footer text");
    $headerFooterManager->setDateTimeAndChildDateTimesText("Date and time text");

    $presentation->save("output-with-master-footers.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

FAQ

Qual è la differenza tra una Master Slide e una Layout Slide?

Una master slide definisce il tema della presentazione e la formattazione condivisa. Una layout slide appartiene a un master e definisce una disposizione riutilizzabile di segnaposto. Le normal slide utilizzano questi layout e memorizzano il contenuto specifico della diapositiva.

Posso copiare una Layout Slide da una presentazione all’altra?

Sì. Aggiungi una copia alla collezione di destinazione con il metodo addClone. Quando copi tra presentazioni, verifica anche i caratteri, i temi, le immagini e le altre risorse utilizzate dal layout di origine.

Cosa succede quando modifico un layout già in uso?

Le diapositive dipendenti ereditano le modifiche al layout, a meno che non sovrascrivano localmente la formattazione o gli oggetti interessati. La geometria dei segnaposto e lo stile ereditato possono quindi cambiare su molte diapositive contemporaneamente. Usa getDependingSlides per identificare le diapositive interessate prima di modificare il layout.

Cosa succede se rimuovo un layout ancora in uso?

Aspose.Slides genera una PptxEditException. Riassegna prima le diapositive dipendenti, oppure usa removeUnusedLayoutSlides per rimuovere solo i layout non referenziati.