Unire presentazioni in modo efficiente in C++

Panoramica

Aspose.Slides consente di unire presentazioni clonando le diapositive da una presentazione all’altra. Questo articolo spiega come unire intere presentazioni o diapositive selezionate, utilizzare un master delle diapositive o un layout specifico durante l’unione, gestire presentazioni con dimensioni delle diapositive diverse e aggiungere diapositive unite a una sezione della presentazione. Copre inoltre note pratiche relative al contenuto unito, incluse le note del relatore, i commenti, i file di origine protetti da password e l’uso dei thread.

Unione di presentazioni

Quando unisci una presentazione a un’altra, combini effettivamente le loro diapositive in un’unica presentazione per ottenere un singolo file.

Cosa può essere unito

Con Aspose.Slides, puoi unire

  • intere presentazioni. Tutte le diapositive delle presentazioni finiscono in un’unica presentazione
  • diapositive specifiche. Le diapositive selezionate finiscono in un’unica presentazione
  • presentazioni in un formato (PPT a PPT, PPTX a PPTX, ecc.) e in formati diversi (PPT a PPTX, PPTX a ODP, ecc.) tra loro.

Opzioni di unione

Puoi applicare opzioni che determinano se

  • ogni diapositiva nella presentazione di destinazione conserva uno stile unico
  • uno stile specifico è usato per tutte le diapositive nella presentazione di destinazione.

Per unire presentazioni, Aspose.Slides fornisce i metodi AddClone (dall’interfaccia ISlideCollection). Esistono diverse implementazioni dei metodi AddClone che definiscono i parametri del processo di unione. Ogni oggetto Presentation ha una collezione Slides, quindi puoi chiamare un metodo AddClone dalla presentazione in cui vuoi unire le diapositive.

Il metodo AddClone restituisce un oggetto ISlide, che è una copia della diapositiva di origine. Le diapositive in una presentazione di output sono semplicemente una copia delle diapositive di origine. Pertanto, puoi modificare le diapositive risultanti (ad esempio, applicare stili, opzioni di formattazione o layout) senza preoccuparti che le presentazioni di origine vengano influenzate.

Unisci presentazioni

Aspose.Slides fornisce il metodo AddClone (ISlide) che consente di combinare diapositive mantenendo i loro layout e stili (parametri predefiniti).

Questo codice C++ mostra come unire presentazioni:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
for (const auto& slide : pres2->get_Slides())
{
    pres1->get_Slides()->AddClone(slide);
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

Unisci presentazioni con un master diapositive

Aspose.Slides fornisce il metodo AddClone (ISlide, IMasterSlide, bool) che consente di combinare diapositive applicando un modello master della presentazione. In questo modo, se necessario, puoi cambiare lo stile delle diapositive nella presentazione di output.

Questo codice C++ dimostra l’operazione descritta:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
for (const auto& slide : pres2->get_Slides())
{
    pres1->get_Slides()->AddClone(slide, pres2->get_Masters()->idx_get(0), true);
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

Se desideri che le diapositive nella presentazione di output abbiano un layout diverso, usa il metodo AddClone (ISlide, ILayoutSlide) durante l’unione.

Unisci diapositive specifiche da presentazioni

Unire diapositive specifiche da più presentazioni è utile per creare deck personalizzati. Aspose.Slides C++ consente di selezionare e importare solo le diapositive necessarie. L’API conserva la formattazione, il layout e il design delle diapositive originali.

Il codice C++ seguente crea una nuova presentazione, aggiunge diapositive titolo da due altre presentazioni e salva il risultato in un file:

SmartPtr<ISlide> GetTitleSlide(SmartPtr<IPresentation> presentation)
{
    for (auto&& slide : presentation->get_Slides())
    {
        if (slide->get_LayoutSlide()->get_LayoutType() == SlideLayoutType::Title)
        {
            return slide;
        }
    }
    return nullptr;
}
auto presentation = MakeObject<Presentation>();
auto presentation1 = MakeObject<Presentation>(u"presentation1.pptx");
auto presentation2 = MakeObject<Presentation>(u"presentation2.pptx");

presentation->get_Slides()->RemoveAt(0);

auto slide1 = GetTitleSlide(presentation1);

if (slide1 != nullptr)
    presentation->get_Slides()->AddClone(slide1);

auto slide2 = GetTitleSlide(presentation2);

if (slide2 != nullptr)
    presentation->get_Slides()->AddClone(slide2);

presentation->Save(u"combined.pptx", SaveFormat::Pptx);

presentation2->Dispose();
presentation1->Dispose();
presentation->Dispose();

Unisci presentazioni con un layout di diapositiva

Questo codice C++ mostra come combinare diapositive da presentazioni applicando il layout di diapositiva preferito per ottenere una presentazione di output:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
for (const auto& slide : pres2->get_Slides())
{
    pres1->get_Slides()->AddClone(slide, pres2->get_LayoutSlides()->idx_get(0));
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

Unisci presentazioni con dimensioni delle diapositive diverse

Per unire 2 presentazioni con dimensioni delle diapositive diverse, devi ridimensionare una delle presentazioni in modo che le sue dimensioni corrispondano a quelle dell’altra.

Questo esempio di codice dimostra l’operazione descritta:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres1Size = pres1->get_SlideSize()->get_Size();

auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
pres2->get_SlideSize()->SetSize(pres1Size.get_Width(), pres1Size.get_Height(), SlideSizeScaleType::EnsureFit);

for (const auto& slide : pres2->get_Slides())
{
    pres1->get_Slides()->AddClone(slide);
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

Unisci diapositive a una sezione della presentazione

Questo codice C++ mostra come unire una diapositiva specifica a una sezione in una presentazione:

auto pres1 = System::MakeObject<Presentation>(u"pres1.pptx");
auto pres2 = System::MakeObject<Presentation>(u"pres2.pptx");
for (int32_t index = 0; index < pres2->get_Slides()->get_Count(); index++)
{
    auto slide = pres2->get_Slides()->idx_get(index);
    pres1->get_Slides()->AddClone(slide, pres1->get_Sections()->idx_get(0));
}

pres1->Save(u"combined.pptx", SaveFormat::Pptx);

La diapositiva viene aggiunta alla fine della sezione.

FAQ

Le note del relatore sono conservate durante l’unione?

Sì. Quando si clonano le diapositive, Aspose.Slides trasferisce tutti gli elementi della diapositiva, incluse note, formattazione e animazioni.

I commenti e i loro autori vengono trasferiti?

I commenti, come parte del contenuto della diapositiva, vengono copiati con la diapositiva. Le etichette degli autori dei commenti sono conservate come oggetti commento nella presentazione risultante.

Cosa succede se la presentazione di origine è protetta da password?

Deve essere aperta con la password tramite LoadOptions::set_Password; dopo il caricamento, quelle diapositive possono essere clonate in modo sicuro in un file di destinazione non protetto (o anche protetto).

Quanto è thread‑safe l’operazione di unione?

Non utilizzare la stessa istanza di Presentation da thread multipli. La regola consigliata è “un documento — un thread”; file diversi possono essere elaborati in parallelo in thread separati.