Aplicar un tema a una presentación
Contents
[
Hide
]
Presentación OpenXML
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "Apply Theme to Presentation.pptx";
string ThemeFileName = FilePath + "Theme.pptx";
ApplyThemeToPresentation(FileName, ThemeFileName);
// Aplicar un nuevo tema a la presentación.
public static void ApplyThemeToPresentation(string presentationFile, string themePresentation)
{
using (PresentationDocument themeDocument = PresentationDocument.Open(themePresentation, false))
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
ApplyThemeToPresentation(presentationDocument, themeDocument);
}
}
// Aplicar un nuevo tema a la presentación.
public static void ApplyThemeToPresentation(PresentationDocument presentationDocument, PresentationDocument themeDocument)
{
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
if (themeDocument == null)
{
throw new ArgumentNullException("themeDocument");
}
// Obtener la parte de presentación del documento de presentación.
PresentationPart presentationPart = presentationDocument.PresentationPart;
// Obtener la parte maestra de diapositivas existente.
SlideMasterPart slideMasterPart = presentationPart.SlideMasterParts.ElementAt(0);
string relationshipId = presentationPart.GetIdOfPart(slideMasterPart);
// Obtener la nueva parte maestra de diapositivas.
SlideMasterPart newSlideMasterPart = themeDocument.PresentationPart.SlideMasterParts.ElementAt(0);
// Eliminar la parte de tema existente.
presentationPart.DeletePart(presentationPart.ThemePart);
// Eliminar la antigua parte maestra de diapositivas.
presentationPart.DeletePart(slideMasterPart);
// Importar la nueva parte maestra de diapositivas y reutilizar el ID de relación antiguo.
newSlideMasterPart = presentationPart.AddPart(newSlideMasterPart, relationshipId);
// Cambiar a la nueva parte de tema.
presentationPart.AddPart(newSlideMasterPart.ThemePart);
Dictionary<string, SlideLayoutPart> newSlideLayouts = new Dictionary<string, SlideLayoutPart>();
foreach (var slideLayoutPart in newSlideMasterPart.SlideLayoutParts)
{
newSlideLayouts.Add(GetSlideLayoutType(slideLayoutPart), slideLayoutPart);
}
string layoutType = null;
SlideLayoutPart newLayoutPart = null;
// Insertar el código para el diseño de este ejemplo.
string defaultLayoutType = "Title and Content";
// Eliminar la relación de diseño de diapositiva en todas las diapositivas.
foreach (var slidePart in presentationPart.SlideParts)
{
layoutType = null;
if (slidePart.SlideLayoutPart != null)
{
// Determinar el tipo de diseño de diapositiva para cada diapositiva.
layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart);
// Eliminar la antigua parte de diseño.
slidePart.DeletePart(slidePart.SlideLayoutPart);
}
if (layoutType != null && newSlideLayouts.TryGetValue(layoutType, out newLayoutPart))
{
// Aplicar la nueva parte de diseño.
slidePart.AddPart(newLayoutPart);
}
else
{
newLayoutPart = newSlideLayouts[defaultLayoutType];
// Aplicar la nueva parte de diseño predeterminada.
slidePart.AddPart(newLayoutPart);
}
}
}
// Obtener el tipo de diseño de diapositiva.
public static string GetSlideLayoutType(SlideLayoutPart slideLayoutPart)
{
CommonSlideData slideData = slideLayoutPart.SlideLayout.CommonSlideData;
// Comentario: Si esto se usa en código de producción, verifique una referencia nula.
return slideData.Name;
}
Aspose.Slides
Para aplicar un tema, necesitamos clonar la diapositiva con la diapositiva maestra; siga los pasos a continuación:
- Crear una instancia de la clase Presentation que contenga la presentación fuente de la cual se clonará la diapositiva.
- Crear una instancia de la clase Presentation que contenga la presentación de destino a la que se clonará la diapositiva.
- Acceder a la diapositiva que se clonará junto con la diapositiva maestra.
- Instanciar la clase IMasterSlideCollection haciendo referencia a la colección Masters expuesta por el objeto Presentation de la presentación de destino.
- Llamar al método AddClone expuesto por el objeto IMasterSlideCollection y pasar la maestra del PPTX fuente que se va a clonar como parámetro al método AddClone.
- Instanciar la clase ISlideCollection estableciendo la referencia a la colección Slides expuesta por el objeto Presentation de la presentación de destino.
- Llamar al método AddClone expuesto por el objeto ISlideCollection y pasar la diapositiva de la presentación fuente que se va a clonar y la diapositiva maestra como parámetros al método AddClone.
- Guardar el archivo de presentación de destino modificado.
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "Apply Theme to Presentation.pptx";
string ThemeFileName = FilePath + "Theme.pptx";
ApplyThemeToPresentation(ThemeFileName, FileName);
public static void ApplyThemeToPresentation(string presentationFile, string outputFile)
{
//Instanciar la clase Presentation para cargar el archivo de presentación fuente
Presentation srcPres = new Presentation(presentationFile);
//Instanciar la clase Presentation para la presentación de destino (donde se clonará la diapositiva)
Presentation destPres = new Presentation(outputFile);
//Instanciar ISlide desde la colección de diapositivas en la presentación fuente junto con
//la diapositiva maestra
ISlide SourceSlide = srcPres.Slides[0];
//Clonar la diapositiva maestra deseada de la presentación fuente a la colección de maestras en la
//presentación de destino
IMasterSlideCollection masters = destPres.Masters;
IMasterSlide SourceMaster = SourceSlide.LayoutSlide.MasterSlide;
//Clonar la diapositiva maestra deseada de la presentación fuente a la colección de maestras en la
//presentación de destino
IMasterSlide iSlide = masters.AddClone(SourceMaster);
//Clonar la diapositiva deseada de la presentación fuente con la maestra deseada al final de la
//colección de diapositivas en la presentación de destino
ISlideCollection slds = destPres.Slides;
slds.AddClone(SourceSlide, iSlide, true);
//Clonar la diapositiva maestra deseada de la presentación fuente a la colección de maestras en la//presentación de destino
//Guardar la presentación de destino en disco
destPres.Save(outputFile, SaveFormat.Pptx);
}