Appliquer ou modifier les mises en page de diapositives en Python

Vue d’ensemble

Un modèle de diapositive définit les positions et le formatage des espaces réservés tels que les titres, le texte, les images, les graphiques et les tableaux. Appliquer un modèle donne aux diapositives une structure cohérente tout en permettant à chaque diapositive de contenir son propre contenu.

  • Diapositive de titre : Contient des espaces réservés pour le titre et le sous-titre.
  • Titre et contenu : Contient un espace réservé pour le titre et un espace réservé de contenu à usage général.
  • Vide : Ne contient aucun espace réservé de contenu et est utile lorsque chaque forme sera positionnée manuellement.

Comprendre l’héritage des modèles

Une présentation possède trois niveaux associés :

  1. Un diapositive maître définit le thème, le formatage partagé, les arrière-plans et les objets communs.
  2. Une diapositive de modèle appartient à un maître et définit une disposition particulière d’espaces réservés.
  3. Une diapositive normale utilise un modèle et stocke le contenu saisi pour cette diapositive.

Une diapositive normale hérite du thème et du formatage de son modèle, et le modèle hérite du maître. Une valeur définie directement sur une diapositive normale remplace la valeur héritée à ce niveau. Lorsqu’une diapositive normale est créée, ses formes d’espace réservé sont générées à partir du modèle sélectionné, tandis que le contenu saisi dans ces espaces réservés appartient à la diapositive normale.

Ajoutez les espaces réservés requis à un modèle avant de créer des diapositives à partir de celui-ci. Ajouter un autre espace réservé à un modèle ultérieurement n’ajoute pas automatiquement une forme d’espace réservé correspondante aux diapositives normales existantes.

Cette relation entraîne deux conséquences importantes :

  • Modifier le formatage hérité ou la géométrie des espaces réservés existants sur un modèle peut mettre à jour chaque diapositive qui en dépend. Avant de modifier un modèle déjà utilisé, inspectez ses diapositives dépendantes et examinez la présentation résultante.
  • Un modèle encore utilisé par une diapositive ne peut pas être supprimé. Réattribuez d’abord ses diapositives dépendantes à un autre modèle, ou supprimez uniquement les modèles inutilisés.

Pour plus d’informations sur le niveau supérieur de cette hiérarchie, voyez Maître de diapositive.

Sélectionner et appliquer un modèle de diapositive

Utilisez un type de modèle lorsque la présentation suit les définitions de modèles PowerPoint standard. Les noms de modèles sont éditables par l’utilisateur et peuvent être localisés, ainsi la sélection basée sur le nom est moins fiable à moins que vous ne contrôliez le modèle source.

L’exemple suivant recherche Titre et contenu sur le premier maître. Si ce modèle n’est pas disponible, il revient délibérément à Vide. La seconde vérification de nullité est nécessaire car une présentation ne peut contenir que des modèles personnalisés. Le modèle sélectionné est ensuite appliqué à la première diapositive normale via la propriété Slide.layout_slide.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    layout_slides = presentation.masters[0].layout_slides
    target_layout = layout_slides.get_by_type(slides.SlideLayoutType.TITLE_AND_OBJECT)

    if target_layout is None:
        target_layout = layout_slides.get_by_type(slides.SlideLayoutType.BLANK)

    if target_layout is None:
        raise RuntimeError("The first master does not contain a suitable layout slide.")

    presentation.slides[0].layout_slide = target_layout
    presentation.save("output-with-new-layout.pptx", slides.export.SaveFormat.PPTX)

Modifier le modèle d’une diapositive ne supprime pas les formes ordinaires ajoutées directement à la diapositive. Cependant, les positions des espaces réservés, le formatage hérité et la correspondance entre les espaces réservés existants et le nouveau modèle peuvent changer, il faut donc inspecter le résultat lors du passage entre des modèles sensiblement différents.

Ajouter une diapositive de modèle

La sélection et la création sont des opérations distinctes. L’exemple précédent sélectionne un modèle existant ; il n’en crée pas. Pour créer un modèle, appelez la méthode MasterLayoutSlideCollection.add sur la collection de modèles du maître cible.

L’exemple suivant ajoute toujours un nouveau modèle Titre et contenu nommé Report Title and Content, puis ajoute une diapositive normale basée sur celui-ci. Les noms de modèles doivent être uniques au sein de la collection.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    master_slide = presentation.masters[0]
    report_layout = master_slide.layout_slides.add(slides.SlideLayoutType.TITLE_AND_OBJECT, "Report Title and Content")
    presentation.slides.add_empty_slide(report_layout)

    presentation.save("output-with-report-layout.pptx", slides.export.SaveFormat.PPTX)

Ajoutez un modèle uniquement lorsque le modèle nécessite réellement une autre structure réutilisable. Si un modèle approprié existe déjà, sélectionnez‑le et réutilisez‑le au lieu d’en créer un duplicata.

Ajouter des espaces réservés à une diapositive de modèle

La propriété LayoutSlide.placeholder_manager fournit un LayoutPlaceholderManager pour ajouter des formes d’espace réservé à un modèle.

Espace réservé PowerPoint LayoutPlaceholderManager Method
Contenu add_content_placeholder(x, y, width, height)
Contenu (Vertical) add_vertical_content_placeholder(x, y, width, height)
Texte add_text_placeholder(x, y, width, height)
Texte (Vertical) add_vertical_text_placeholder(x, y, width, height)
Image add_picture_placeholder(x, y, width, height)
Graphique add_chart_placeholder(x, y, width, height)
Tableau add_table_placeholder(x, y, width, height)
SmartArt add_smart_art_placeholder(x, y, width, height)
Média add_media_placeholder(x, y, width, height)
Image en ligne add_online_image_placeholder(x, y, width, height)

L’exemple suivant vérifie que le modèle Vide existe, ajoute quatre espaces réservés à celui‑ci, puis crée une diapositive normale qui utilise le modèle modifié. L’ordre est intentionnel : les espaces réservés sont ajoutés avant la création de la diapositive normale, afin qu’Aspose.Slides puisse générer les formes d’espace réservé correspondantes sur cette diapositive.

import aspose.slides as slides

with slides.Presentation() as presentation:
    blank_layout = presentation.layout_slides.get_by_type(slides.SlideLayoutType.BLANK)

    if blank_layout is None:
        raise RuntimeError("The presentation does not contain a Blank layout slide.")

    placeholder_manager = blank_layout.placeholder_manager
    placeholder_manager.add_content_placeholder(20, 20, 310, 270)
    placeholder_manager.add_vertical_text_placeholder(350, 20, 350, 270)
    placeholder_manager.add_chart_placeholder(20, 310, 310, 180)
    placeholder_manager.add_table_placeholder(350, 310, 350, 180)

    presentation.slides.add_empty_slide(blank_layout)
    presentation.save("output-with-placeholders.pptx", slides.export.SaveFormat.PPTX)

Le résultat :

Les espaces réservés sur la diapositive de modèle

Supprimer les diapositives de modèle inutilisées

Utilisez la méthode Compress.remove_unused_layout_slides pour supprimer les modèles auxquels aucune diapositive normale ne fait référence. La méthode laisse intacts les modèles encore utilisés.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    slides.lowcode.Compress.remove_unused_layout_slides(presentation)
    presentation.save("output-without-unused-layouts.pptx", slides.export.SaveFormat.PPTX)

Pour supprimer un modèle spécifique, utilisez d’abord sa propriété has_depending_slides ou sa méthode get_depending_slides. Réattribuez les diapositives dépendantes avant d’appeler LayoutSlide.remove. Tenter de supprimer un modèle utilisé déclenche une PptxEditException.

Contrôler la visibilité du pied de page sur une diapositive de modèle

Un modèle possède ses propres espaces réservés pour le pied de page, le numéro de diapositive et la date‑heure. Utilisez la propriété LayoutSlide.header_footer_manager pour contrôler ces espaces réservés pour un modèle. Ceci est utile lorsque, par exemple, les modèles de contenu doivent afficher les pieds de page mais pas les modèles de titre.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    layout_slide = presentation.layout_slides.get_by_type(slides.SlideLayoutType.TITLE_AND_OBJECT)

    if layout_slide is None:
        layout_slide = presentation.layout_slides.get_by_type(slides.SlideLayoutType.BLANK)

    if layout_slide is None:
        raise RuntimeError("The presentation does not contain a suitable layout slide.")

    header_footer_manager = layout_slide.header_footer_manager
    header_footer_manager.set_footer_visibility(True)
    header_footer_manager.set_slide_number_visibility(True)
    header_footer_manager.set_date_time_visibility(True)
    header_footer_manager.set_footer_text("Footer text")
    header_footer_manager.set_date_time_text("Date and time text")

    presentation.save("output-with-layout-footers.pptx", slides.export.SaveFormat.PPTX)

Contrôler la visibilité du pied de page sur un maître et ses modèles enfants

Pour appliquer des paramètres de pied de page cohérents à travers une hiérarchie de maître, utilisez la propriété MasterSlide.header_footer_manager. Les méthodes de propagation de MasterSlideHeaderFooterManager agissent sur le maître et ses diapositives de modèle et diapositives normales dépendantes ; elles ne ciblent pas une seule diapositive normale.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    header_footer_manager = presentation.masters[0].header_footer_manager
    header_footer_manager.set_footer_and_child_footers_visibility(True)
    header_footer_manager.set_slide_number_and_child_slide_numbers_visibility(True)
    header_footer_manager.set_date_time_and_child_date_times_visibility(True)
    header_footer_manager.set_footer_and_child_footers_text("Footer text")
    header_footer_manager.set_date_time_and_child_date_times_text("Date and time text")

    presentation.save("output-with-master-footers.pptx", slides.export.SaveFormat.PPTX)

FAQ

Quelle est la différence entre une diapositive maître et une diapositive de modèle ?

Une diapositive maître définit le thème de la présentation et le formatage partagé. Une diapositive de modèle appartient à un maître et définit une disposition réutilisable d’espaces réservés. Les diapositives normales utilisent ces modèles et stockent le contenu propre à chaque diapositive.

Puis‑je copier une diapositive de modèle d’une présentation à une autre ?

Oui. Ajoutez une copie à la collection de destination avec la méthode add_clone. Lors de la copie entre présentations, vérifiez également les polices, les thèmes, les images et les autres ressources utilisées par le modèle source.

Que se passe‑t‑il lorsque je modifie un modèle déjà utilisé ?

Les diapositives dépendantes héritent des modifications du modèle sauf si elles remplacent localement le formatage ou les objets affectés. La géométrie des espaces réservés et le style hérité peuvent donc changer sur de nombreuses diapositives à la fois. Utilisez get_depending_slides pour identifier les diapositives concernées avant de modifier le modèle.

Que se passe‑t‑il si je supprime un modèle qui est encore utilisé ?

Aspose.Slides déclenche une PptxEditException. Réattribuez d’abord les diapositives dépendantes, ou utilisez remove_unused_layout_slides pour supprimer uniquement les modèles non référencés.