Appliquer un thème à une présentation
Contents
[
Hide
]
OpenXML Présentation:
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "Appliquer Thème à la Présentation.pptx";
string ThemeFileName = FilePath + "Thème.pptx";
AppliquerThèmeÀLaPrésentation(FileName, ThemeFileName);
// Appliquer un nouveau thème à la présentation.
public static void AppliquerThèmeÀLaPrésentation(string presentationFile, string themePresentation)
{
using (PresentationDocument themeDocument = PresentationDocument.Open(themePresentation, false))
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
AppliquerThèmeÀLaPrésentation(presentationDocument, themeDocument);
}
}
// Appliquer un nouveau thème à la présentation.
public static void AppliquerThèmeÀLaPrésentation(PresentationDocument presentationDocument, PresentationDocument themeDocument)
{
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
if (themeDocument == null)
{
throw new ArgumentNullException("themeDocument");
}
// Obtenir la partie de présentation du document de présentation.
PresentationPart presentationPart = presentationDocument.PresentationPart;
// Obtenir la partie du maître de diapositive existante.
SlideMasterPart slideMasterPart = presentationPart.SlideMasterParts.ElementAt(0);
string relationshipId = presentationPart.GetIdOfPart(slideMasterPart);
// Obtenir la nouvelle partie du maître de diapositive.
SlideMasterPart newSlideMasterPart = themeDocument.PresentationPart.SlideMasterParts.ElementAt(0);
// Supprimer la partie du thème existante.
presentationPart.DeletePart(presentationPart.ThemePart);
// Supprimer l'ancienne partie du maître de diapositive.
presentationPart.DeletePart(slideMasterPart);
// Importer la nouvelle partie du maître de diapositive et réutiliser l'ancien ID de relation.
newSlideMasterPart = presentationPart.AddPart(newSlideMasterPart, relationshipId);
// Changer pour la nouvelle partie du thème.
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;
// Insérer le code pour le layout de cet exemple.
string defaultLayoutType = "Titre et Contenu";
// Supprimer la relation de mise en page sur toutes les diapositives.
foreach (var slidePart in presentationPart.SlideParts)
{
layoutType = null;
if (slidePart.SlideLayoutPart != null)
{
// Déterminer le type de mise en page de diapositive pour chaque diapositive.
layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart);
// Supprimer l'ancienne partie de mise en page.
slidePart.DeletePart(slidePart.SlideLayoutPart);
}
if (layoutType != null && newSlideLayouts.TryGetValue(layoutType, out newLayoutPart))
{
// Appliquer la nouvelle partie de mise en page.
slidePart.AddPart(newLayoutPart);
}
else
{
newLayoutPart = newSlideLayouts[defaultLayoutType];
// Appliquer la nouvelle partie de mise en page par défaut.
slidePart.AddPart(newLayoutPart);
}
}
}
// Obtenir le type de mise en page de la diapositive.
public static string GetSlideLayoutType(SlideLayoutPart slideLayoutPart)
{
CommonSlideData slideData = slideLayoutPart.SlideLayout.CommonSlideData;
// Remarques : Si cela est utilisé dans le code de production, vérifiez pour une référence nulle.
return slideData.Name;
}
Aspose.Slides
Pour appliquer un thème, nous devons cloner la diapositive avec le maître, veuillez suivre les étapes ci-dessous :
- Créer une instance de la classe Presentation contenant la présentation source à partir de laquelle la diapositive sera clonée.
- Créer une instance de la classe Presentation contenant la présentation de destination vers laquelle la diapositive sera clonée.
- Accéder à la diapositive à cloner ainsi qu’à la diapositive maître.
- Instancier la classe IMasterSlideCollection en faisant référence à la collection Masters exposée par l’objet Presentation de la présentation de destination.
- Appeler la méthode AddClone exposée par l’objet IMasterSlideCollection et passer le maître de la source PPTX à cloner comme paramètre à la méthode AddClone.
- Instancier la classe ISlideCollection en définissant la référence à la collection Slides exposée par l’objet Presentation de la présentation de destination.
- Appeler la méthode AddClone exposée par l’objet ISlideCollection et passer la diapositive de la présentation source à cloner et la diapositive maître comme paramètres à la méthode AddClone.
- Écrire le fichier de présentation de destination modifié.
string FilePath = @"..\..\..\..\Sample Files\";
string FileName = FilePath + "Appliquer Thème à la Présentation.pptx";
string ThemeFileName = FilePath + "Thème.pptx";
AppliquerThèmeÀLaPrésentation(ThemeFileName, FileName);
public static void AppliquerThèmeÀLaPrésentation(string presentationFile, string outputFile)
{
//Instancier la classe Presentation pour charger le fichier de présentation source
Presentation srcPres = new Presentation(presentationFile);
//Instancier la classe Presentation pour la présentation de destination (où la diapositive doit être clonée)
Presentation destPres = new Presentation(outputFile);
//Instancier ISlide à partir de la collection de diapositives dans la présentation source ainsi que
//la diapositive maître
ISlide SourceSlide = srcPres.Slides[0];
//Cloner la diapositive maître souhaitée de la présentation source à la collection de maîtres dans la
//présentation de destination
IMasterSlideCollection masters = destPres.Masters;
IMasterSlide SourceMaster = SourceSlide.LayoutSlide.MasterSlide;
//Cloner la diapositive maître souhaitée de la présentation source à la collection de maîtres dans la
//présentation de destination
IMasterSlide iSlide = masters.AddClone(SourceMaster);
//Cloner la diapositive souhaitée de la présentation source avec le maître souhaité à la fin de la
//collection de diapositives dans la présentation de destination
ISlideCollection slds = destPres.Slides;
slds.AddClone(SourceSlide, iSlide, true);
//Cloner la diapositive maître souhaitée de la présentation source à la collection de maîtres dans la //présentation de destination
//Sauvegarder la présentation de destination sur disque
destPres.Save(outputFile, SaveFormat.Pptx);
}