Fusionar presentaciones de forma eficiente en C++

Fusión de presentaciones

Al fusionar una presentación con otra, está combinando efectivamente sus diapositivas en una sola presentación para obtener un archivo.

Qué se puede fusionar

Con Aspose.Slides, puede fusionar

  • presentaciones completas. Todas las diapositivas de las presentaciones terminan en una sola presentación
  • diapositivas específicas. Las diapositivas seleccionadas terminan en una sola presentación
  • presentaciones en un mismo formato (PPT a PPT, PPTX a PPTX, etc.) y en diferentes formatos (PPT a PPTX, PPTX a ODP, etc.) entre sí.

Opciones de fusión

Puede aplicar opciones que determinan si

  • cada diapositiva en la presentación de salida conserva un estilo único
  • se utiliza un estilo específico para todas las diapositivas en la presentación de salida.

Para combinar presentaciones, Aspose.Slides proporciona métodos AddClone (de la interfaz ISlideCollection). Hay varias implementaciones de los métodos AddClone que definen los parámetros del proceso de fusión de presentaciones. Cada objeto Presentation tiene una colección Slides, por lo que puede llamar a un método AddClone desde la presentación a la que desea combinar diapositivas.

El método AddClone devuelve un objeto ISlide, que es una réplica de la diapositiva origen. Las diapositivas en una presentación de salida son simplemente una copia de las diapositivas de la fuente. Por lo tanto, puede modificar las diapositivas resultantes (por ejemplo, aplicar estilos, opciones de formato o diseños) sin preocuparse de que las presentaciones de origen se vean afectadas.

Fusionar presentaciones

Aspose.Slides proporciona el método AddClone (ISlide) que permite combinar diapositivas mientras las diapositivas conservan sus diseños y estilos (parámetros predeterminados).

Este código C++ le muestra cómo fusionar presentaciones:

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

Fusionar presentaciones con un maestro de diapositivas

Aspose.Slides proporciona el método AddClone (ISlide, IMasterSlide, bool) que permite combinar diapositivas aplicando una plantilla de maestro de diapositivas. De este modo, si es necesario, puede cambiar el estilo de las diapositivas en la presentación de salida.

Este código C++ demuestra la operación descrita:

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 desea que las diapositivas en la presentación de salida tengan un diseño de diapositiva diferente, utilice el método AddClone (ISlide, ILayoutSlide) en su lugar al combinar.

Fusionar diapositivas específicas de presentaciones

Combinar diapositivas específicas de varias presentaciones es útil para crear paquetes de diapositivas personalizados. Aspose.Slides C++ permite seleccionar e importar solo las diapositivas que necesita. La API preserva el formato, el diseño y la apariencia de las diapositivas originales.

El siguiente código C++ crea una nueva presentación, agrega diapositivas de título de dos presentaciones distintas y guarda el resultado en un archivo:

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

Fusionar presentaciones con un diseño de diapositiva

Este código C++ le muestra cómo combinar diapositivas de presentaciones aplicando su diseño de diapositiva preferido para obtener una única presentación de salida:

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

Fusionar presentaciones con diferentes tamaños de diapositiva

Para fusionar 2 presentaciones con diferentes tamaños de diapositiva, debe cambiar el tamaño de una de las presentaciones para que coincida con el de la otra.

Este código de ejemplo demuestra la operación descrita:

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

Fusionar diapositivas a una sección de presentación

Este código C++ le muestra cómo fusionar una diapositiva específica a una sección en una presentación:

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 se agrega al final de la sección.

Preguntas frecuentes

¿Se conservan las notas del orador al fusionar?

Sí. Al clonar diapositivas, Aspose.Slides traslada todos los elementos de la diapositiva, incluidas notas, formato y animaciones.

¿Se transfieren los comentarios y sus autores?

Los comentarios, como parte del contenido de la diapositiva, se copian con la diapositiva. Las etiquetas de autor de los comentarios se conservan como objetos de comentario en la presentación resultante.

¿Qué ocurre si la presentación origen está protegida con contraseña?

Debe abrirse con la contraseña mediante LoadOptions::set_Password; tras cargarla, esas diapositivas pueden clonarse de forma segura en un archivo de destino sin protección (o también protegido).

¿Qué tan seguro es el proceso de fusión en entornos multihilo?

No utilice la misma instancia de Presentation desde múltiples hilos. La regla recomendada es “un documento — un hilo”; diferentes archivos pueden procesarse en paralelo en hilos independientes.