Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour ajouter par programme une transition entre toutes les diapositives d’une présentation.
Obtention d’un objet Presentation
Dans le Kit de développement logiciel (SDK) Open XML, la PresentationDocument classe représente un package de document de présentation. Pour utiliser un document de présentation, commencez par créer un instance de la PresentationDocument
classe, puis utilisez cette instance. Pour créer la classe instance à partir du document, appelez la Open méthode , qui utilise un chemin d’accès de fichier et une valeur booléenne comme deuxième paramètre pour spécifier si un document est modifiable. Pour ouvrir un document en lecture/écriture, spécifiez la valeur true
de ce paramètre, comme indiqué dans l’instruction suivante using
. Dans ce code, le paramètre file est une chaîne qui représente le chemin du fichier à partir duquel vous souhaitez ouvrir le document.
using (PresentationDocument presentationDocument = PresentationDocument.Open(filePath, true))
Avec v3.0.0+ la Close() méthode a été supprimée au profit de l’instruction using.
Cela garantit que la Dispose() méthode est appelée automatiquement lorsque l’accolade fermante est atteinte. Le bloc qui suit l’instruction using
établit une étendue pour l’objet créé ou nommé dans l’instruction using
, dans ce cas ppt
.
Structure de la transition
L’élément <transition>
Transition spécifie le type de transition de diapositive qui doit être utilisé pour passer à la diapositive active à partir de la diapositive précédente. En d’autres termes, les informations de transition sont stockées dans la diapositive qui s’affiche à l’issue de la transition.
Le tableau suivant répertorie les attributs de la transition, ainsi que la description de chacun d’eux.
Attribut | Description |
---|---|
advClick (Avancer sur clic) | Spécifie si un clic de souris avance ou non la diapositive. Si cet attribut n’est pas spécifié, la valeur true est supposée. |
advTm (Avance après l’heure) | Spécifie la durée, en millisecondes, après laquelle la transition doit démarrer. Ce paramètre peut être utilisé conjointement avec l’attribut advClick. Si cet attribut n’est pas spécifié, il est supposé qu’aucune progression automatique ne se produit. |
spd (Vitesse de transition) | Spécifie la vitesse de transition à utiliser lors de la transition de la diapositive actuelle à la suivante. |
[Exemple : Prenons l’exemple suivant
<p:transition spd="slow" advClick="1" advTm="3000">
<p:randomBar dir="horz"/>
</p:transition>
Dans l’exemple ci-dessus, la vitesse <speed>
de transition est définie sur lente (options disponibles : lente, med, rapide). L’option Advance on Click <advClick>
a la valeur true, et l’option Avancer après l’heure <advTm>
est définie sur 3 000 millisecondes. L’élément <randomBar>
enfant Barre aléatoire décrit l’effet de transition de diapositive randomBar, qui utilise un ensemble de barres horizontales <dir="horz">
ou verticales <dir="vert">
placées de manière aléatoire sur la diapositive qui continuent d’être ajoutées jusqu’à ce que la nouvelle diapositive soit entièrement affichée.
Fin de l’exemple]
Vous pouvez consulter la liste complète des éléments enfants de Transition ici : Transition
Structure du contenu de remplacement
Office Open XML définit un mécanisme de stockage de contenu qui n’est pas défini par la spécification Office Open XML ISO/IEC 29500, comme les extensions développées par les futures applications logicielles qui tirent parti des formats Office Open XML. Ce mécanisme permet le stockage d’une série de représentations alternatives de contenu, à partir desquelles l’application consommatrice peut utiliser la première alternative dont les exigences sont remplies.
Prenons l’exemple d’une application qui crée un objet de transition destiné à spécifier la durée de la transition. Cette fonctionnalité n’est pas définie dans la spécification Office Open XML. L’utilisation d’un bloc AlternateContent comme suit permet de spécifier la durée <p14:dur>
en millisecondes.
[Exemple :
<mc:AlternateContent xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:p14="http://schemas.microsoft.com/office/powerpoint/2010/main">
<mc:Choice Requires="p14">
<p:transition spd="slow" p14:dur="2000" advClick="1" advTm="3000">
<p:randomBar/>
</p:transition>
</mc:Choice>
<mc:Fallback>
<p:transition spd="slow" advClick="1" advTm="3000">
<p:randomBar/>
</p:transition>
</mc:Fallback>
</mc:AlternateContent>
L’élément Choice de l’exemple ci-dessus nécessite que l’attribut dur spécifie la durée de la transition, et l’élément Fallback permet aux clients qui ne prennent pas en charge cet espace de noms de voir une autre représentation appropriée. Fin de l’exemple]
Vous trouverez plus d’informations sur la classe P14 ici : P14
Fonctionnement de l’exemple de code
Après avoir ouvert le fichier de présentation pour un accès en lecture-écriture dans l’instruction using, le code obtient le composant Présentation à partir du document de présentation. Ensuite, il récupère les ID de relation de toutes les diapositives de la présentation et obtient le composant diapositives à partir de l’ID de relation. Le code vérifie ensuite si aucune transition n’est définie sur les diapositives et les remplace par un nouveau RandomBarTransition.
// Define the transition start time and duration in milliseconds
string startTransitionAfterMs = "3000", durationMs = "2000";
// Set to true if you want to advance to the next slide on mouse click
bool advanceOnClick = true;
// Iterate through each slide ID to get slides parts
foreach (SlideId slideId in slidesIds)
{
// Get the relationship ID of the slide
string? relId = slideId!.RelationshipId!.ToString();
if (relId == null)
{
throw new NullReferenceException("RelationshipId not found");
}
// Get the slide part using the relationship ID
SlidePart? slidePart = (SlidePart)presentationDocument.PresentationPart.GetPartById(relId);
// Remove existing transitions if any
if (slidePart.Slide.Transition != null)
{
slidePart.Slide.Transition.Remove();
}
// Check if there are any AlternateContent elements
if (slidePart!.Slide.Descendants<AlternateContent>().ToList().Count > 0)
{
// Get all AlternateContent elements
List<AlternateContent> alternateContents = [.. slidePart.Slide.Descendants<AlternateContent>()];
foreach (AlternateContent alternateContent in alternateContents)
{
// Remove transitions in AlternateContentChoice within AlternateContent
List<OpenXmlElement> childElements = alternateContent.ChildElements.ToList();
foreach (OpenXmlElement element in childElements)
{
List<Transition> transitions = element.Descendants<Transition>().ToList();
foreach (Transition transition in transitions)
{
transition.Remove();
}
}
// Add new transitions to AlternateContentChoice and AlternateContentFallback
alternateContent!.GetFirstChild<AlternateContentChoice>();
Transition choiceTransition = new Transition(new RandomBarTransition()) { Duration = durationMs, AdvanceAfterTime = startTransitionAfterMs, AdvanceOnClick = advanceOnClick, Speed = TransitionSpeedValues.Slow };
Transition fallbackTransition = new Transition(new RandomBarTransition()) {AdvanceAfterTime = startTransitionAfterMs, AdvanceOnClick = advanceOnClick, Speed = TransitionSpeedValues.Slow };
alternateContent!.GetFirstChild<AlternateContentChoice>()!.Append(choiceTransition);
alternateContent!.GetFirstChild<AlternateContentFallback>()!.Append(fallbackTransition);
}
}
S’il n’y a actuellement aucune transition sur la diapositive, le code crée une transition. Dans les deux cas en tant que transition de secours, RandomBarTransition est utilisé mais sans P14:dur
(durée) pour permettre la prise en charge râpée pour les clients qui ne prennent pas en charge cet espace de noms
// Add transition if there is none
else
{
// Check if there is a transition appended to the slide and set it to null
if (slidePart.Slide.Transition != null)
{
slidePart.Slide.Transition = null;
}
// Create a new AlternateContent element
AlternateContent alternateContent = new AlternateContent();
alternateContent.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
// Create a new AlternateContentChoice element and add the transition
AlternateContentChoice alternateContentChoice = new AlternateContentChoice() { Requires = "p14" };
Transition choiceTransition = new Transition(new RandomBarTransition()) { Duration = durationMs, AdvanceAfterTime = startTransitionAfterMs, AdvanceOnClick = advanceOnClick, Speed = TransitionSpeedValues.Slow };
Transition fallbackTransition = new Transition(new RandomBarTransition()) { AdvanceAfterTime = startTransitionAfterMs, AdvanceOnClick = advanceOnClick, Speed = TransitionSpeedValues.Slow };
alternateContentChoice.Append(choiceTransition);
// Create a new AlternateContentFallback element and add the transition
AlternateContentFallback alternateContentFallback = new AlternateContentFallback(fallbackTransition);
alternateContentFallback.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main");
alternateContentFallback.AddNamespaceDeclaration("p16", "http://schemas.microsoft.com/office/powerpoint/2015/main");
alternateContentFallback.AddNamespaceDeclaration("adec", "http://schemas.microsoft.com/office/drawing/2017/decorative");
alternateContentFallback.AddNamespaceDeclaration("a16", "http://schemas.microsoft.com/office/drawing/2014/main");
// Append the AlternateContentChoice and AlternateContentFallback to the AlternateContent
alternateContent.Append(alternateContentChoice);
alternateContent.Append(alternateContentFallback);
slidePart.Slide.Append(alternateContent);
}
Exemple de code
Voici l’exemple de code complet que vous pouvez utiliser pour ajouter RandomBarTransition à toutes les diapositives.
AddTransmitionToSlides(args[0]);
static void AddTransmitionToSlides(string filePath)
{
using (PresentationDocument presentationDocument = PresentationDocument.Open(filePath, true))
{
// Check if the presentation part and slide list are available
if (presentationDocument.PresentationPart == null || presentationDocument.PresentationPart.Presentation.SlideIdList == null)
{
throw new NullReferenceException("Presentation part is empty or there are no slides");
}
// Get the presentation part
PresentationPart presentationPart = presentationDocument.PresentationPart;
// Get the list of slide IDs
OpenXmlElementList slidesIds = presentationPart.Presentation.SlideIdList.ChildElements;
// Define the transition start time and duration in milliseconds
string startTransitionAfterMs = "3000", durationMs = "2000";
// Set to true if you want to advance to the next slide on mouse click
bool advanceOnClick = true;
// Iterate through each slide ID to get slides parts
foreach (SlideId slideId in slidesIds)
{
// Get the relationship ID of the slide
string? relId = slideId!.RelationshipId!.ToString();
if (relId == null)
{
throw new NullReferenceException("RelationshipId not found");
}
// Get the slide part using the relationship ID
SlidePart? slidePart = (SlidePart)presentationDocument.PresentationPart.GetPartById(relId);
// Remove existing transitions if any
if (slidePart.Slide.Transition != null)
{
slidePart.Slide.Transition.Remove();
}
// Check if there are any AlternateContent elements
if (slidePart!.Slide.Descendants<AlternateContent>().ToList().Count > 0)
{
// Get all AlternateContent elements
List<AlternateContent> alternateContents = [.. slidePart.Slide.Descendants<AlternateContent>()];
foreach (AlternateContent alternateContent in alternateContents)
{
// Remove transitions in AlternateContentChoice within AlternateContent
List<OpenXmlElement> childElements = alternateContent.ChildElements.ToList();
foreach (OpenXmlElement element in childElements)
{
List<Transition> transitions = element.Descendants<Transition>().ToList();
foreach (Transition transition in transitions)
{
transition.Remove();
}
}
// Add new transitions to AlternateContentChoice and AlternateContentFallback
alternateContent!.GetFirstChild<AlternateContentChoice>();
Transition choiceTransition = new Transition(new RandomBarTransition()) { Duration = durationMs, AdvanceAfterTime = startTransitionAfterMs, AdvanceOnClick = advanceOnClick, Speed = TransitionSpeedValues.Slow };
Transition fallbackTransition = new Transition(new RandomBarTransition()) {AdvanceAfterTime = startTransitionAfterMs, AdvanceOnClick = advanceOnClick, Speed = TransitionSpeedValues.Slow };
alternateContent!.GetFirstChild<AlternateContentChoice>()!.Append(choiceTransition);
alternateContent!.GetFirstChild<AlternateContentFallback>()!.Append(fallbackTransition);
}
}
// Add transition if there is none
else
{
// Check if there is a transition appended to the slide and set it to null
if (slidePart.Slide.Transition != null)
{
slidePart.Slide.Transition = null;
}
// Create a new AlternateContent element
AlternateContent alternateContent = new AlternateContent();
alternateContent.AddNamespaceDeclaration("mc", "http://schemas.openxmlformats.org/markup-compatibility/2006");
// Create a new AlternateContentChoice element and add the transition
AlternateContentChoice alternateContentChoice = new AlternateContentChoice() { Requires = "p14" };
Transition choiceTransition = new Transition(new RandomBarTransition()) { Duration = durationMs, AdvanceAfterTime = startTransitionAfterMs, AdvanceOnClick = advanceOnClick, Speed = TransitionSpeedValues.Slow };
Transition fallbackTransition = new Transition(new RandomBarTransition()) { AdvanceAfterTime = startTransitionAfterMs, AdvanceOnClick = advanceOnClick, Speed = TransitionSpeedValues.Slow };
alternateContentChoice.Append(choiceTransition);
// Create a new AlternateContentFallback element and add the transition
AlternateContentFallback alternateContentFallback = new AlternateContentFallback(fallbackTransition);
alternateContentFallback.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main");
alternateContentFallback.AddNamespaceDeclaration("p16", "http://schemas.microsoft.com/office/powerpoint/2015/main");
alternateContentFallback.AddNamespaceDeclaration("adec", "http://schemas.microsoft.com/office/drawing/2017/decorative");
alternateContentFallback.AddNamespaceDeclaration("a16", "http://schemas.microsoft.com/office/drawing/2014/main");
// Append the AlternateContentChoice and AlternateContentFallback to the AlternateContent
alternateContent.Append(alternateContentChoice);
alternateContent.Append(alternateContentFallback);
slidePart.Slide.Append(alternateContent);
}
}
}
}