Fusionner efficacement les présentations en C++

Fusion de présentations

Lorsque vous fusionnez une présentation avec une autre, vous combinez effectivement leurs diapositives dans une seule présentation pour obtenir un fichier unique.

Ce qui peut être fusionné

Avec Aspose.Slides, vous pouvez fusionner

  • des présentations entières. Toutes les diapositives des présentations sont réunies dans une seule présentation
  • des diapositives spécifiques. Les diapositives sélectionnées sont réunies dans une seule présentation
  • des présentations dans un même format (PPT en PPT, PPTX en PPTX, etc.) et dans des formats différents (PPT en PPTX, PPTX en ODP, etc.) les unes avec les autres.

Options de fusion

Vous pouvez appliquer des options qui déterminent si

  • chaque diapositive de la présentation de sortie conserve un style unique
  • un style spécifique est utilisé pour toutes les diapositives de la présentation de sortie.

Pour fusionner des présentations, Aspose.Slides fournit les méthodes AddClone (depuis l’interface ISlideCollection). Plusieurs implémentations des méthodes AddClone définissent les paramètres du processus de fusion des présentations. Chaque objet Presentation possède une collection Slides; vous pouvez donc appeler une méthode AddClone depuis la présentation dans laquelle vous souhaitez fusionner des diapositives.

La méthode AddClone renvoie un objet ISlide, qui est un clone de la diapositive source. Les diapositives dans une présentation de sortie sont simplement une copie des diapositives de la source. Ainsi, vous pouvez modifier les diapositives résultantes (par exemple, appliquer des styles, des options de mise en forme ou des dispositions) sans vous soucier d’affecter les présentations sources.

Fusionner des présentations

Aspose.Slides fournit la méthode AddClone (ISlide) qui permet de combiner des diapositives tout en conservant leurs dispositions et styles (paramètres par défaut).

Ce code C++ vous montre comment fusionner des présentations :

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);

Fusionner des présentations avec un maître de diapositive

Aspose.Slides fournit la méthode AddClone (ISlide, IMasterSlide, bool) qui permet de combiner des diapositives tout en appliquant un modèle de maître de diapositive. Ainsi, si nécessaire, vous pouvez modifier le style des diapositives de la présentation de sortie.

Ce code C++ illustre l’opération décrite :

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);

Si vous voulez que les diapositives de la présentation de sortie aient une disposition différente, utilisez la méthode AddClone (ISlide, ILayoutSlide) lors de la fusion.

Fusionner des diapositives spécifiques à partir de présentations

Fusionner des diapositives spécifiques provenant de plusieurs présentations est utile pour créer des ensembles de diapositives personnalisés. Aspose.Slides C++ vous permet de sélectionner et d’importer uniquement les diapositives dont vous avez besoin. L’API préserve la mise en forme, la disposition et le design des diapositives originales.

Le code C++ suivant crée une nouvelle présentation, ajoute des diapositives titre provenant de deux autres présentations, puis enregistre le résultat dans un fichier :

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();

Fusionner des présentations avec une disposition de diapositive

Ce code C++ vous montre comment combiner des diapositives provenant de présentations tout en appliquant votre disposition de diapositive préférée afin d’obtenir une présentation de sortie unique :

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);

Fusionner des présentations avec des tailles de diapositive différentes

Pour fusionner 2 présentations avec des tailles de diapositive différentes, vous devez redimensionner l’une des présentations afin que sa taille corresponde à celle de l’autre présentation.

Ce code d’exemple montre l’opération décrite :

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);

Fusionner des diapositives dans une section de présentation

Ce code C++ montre comment fusionner une diapositive spécifique dans une section d’une présentation :

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 diapositive est ajoutée à la fin de la section.

FAQ

Les notes du présentateur sont‑elles conservées lors de la fusion ?

Oui. Lors du clonage des diapositives, Aspose.Slides transfère tous les éléments de la diapositive, y compris les notes, la mise en forme et les animations.

Les commentaires et leurs auteurs sont‑ils transférés ?

Les commentaires, faisant partie du contenu de la diapositive, sont copiés avec la diapositive. Les étiquettes des auteurs de commentaires sont préservées en tant qu’objets commentaire dans la présentation résultante.

Que se passe‑t‑il si la présentation source est protégée par mot de passe ?

Elle doit être ouvert avec le mot de passe via LoadOptions::set_Password; après le chargement, ces diapositives peuvent être clonées en toute sécurité dans un fichier cible non protégé (ou également protégé).

Quel est le niveau de thread‑safety de l’opération de fusion ?

N’utilisez pas la même instance de Presentation depuis plusieurs threads. La règle recommandée est « un document — un thread » ; différents fichiers peuvent être traités en parallèle dans des threads séparés.