Pour la même page de tableau horizontal dans Word, ne modifiez pas l'orientation de l'ensemble de l'article.

Dans le même document Word, seule la page du tableau doit être en orientation paysage. Ne changez pas l’intégralité de l’article en orientation paysage. Cet article crée d'abord toutes les sections, puis récupère la section cible par index, définit respectivement la direction, la largeur et la hauteur de la page, enregistre et relit, et confirme qu'aucune des autres sections n'a été modifiée.

Lorsque seules certaines pages d'un document Word doivent être en orientation paysage, l'erreur la plus courante consiste à changer directement l'ensemble du document en orientation paysage, ou à faire pivoter le tableau, puis le contenu est recadré. Cet article est destiné aux développeurs et aux équipes documentaires qui doivent utiliser python-docx pour gérer automatiquement la mise en page Word. Il explique comment modifier uniquement l'orientation de la page de la section cible.

La clé pour comprendre est de faire la distinction entre les sauts de page et les sauts de section. Les sauts de page contrôlent uniquement les sauts de ligne et ne portent pas sur l'orientation de la page, le format du papier et les marges ; ces propriétés de mise en page sont liées aux « sections ». Après avoir lu cet article, vous devriez pouvoir d'abord créer toutes les sections, puis extraire la section cible par index, définir respectivement la direction, la largeur et la hauteur, et relire après avoir enregistré pour confirmer que les autres sections n'ont pas été modifiées. Pour plus de détails sur l'API relative à la section, veuillez vous référer à documentation officielle des sections python-docx.

Conclusion en une phrase : Word rend uniquement les pages de tableau horizontales. Comment le régler ?

Créez uniquement une section distincte pour le contenu qui doit être horizontal, échangez la largeur et la hauteur et définissez la direction de cette section, et gardez les autres sections verticales.

votre situationPratiques recommandéesraison
Il n'y a pas de sauts de section avant et après la page cibleUtilisez d'abord add_section() pour diviser, puis définissez la directionLes attributs de mise en page sont stockés dans des sections. Vous ne pouvez pas modifier uniquement la page cible sans diviser les sections.
Seul le PAYSAGE est défini mais la largeur et la hauteur ne sont pas inversées.Échangez page_width et page_height simultanémentLe simple fait de changer l'orientation entraînera un format de papier incorrect et le contenu pourra être rogné lors de l'exportation au format PDF.
Le tableau est toujours tronqué après avoir défini l'orientation paysageVérifiez les marges gauche et droite de la section, ou réduisez la largeur du tableauLe code ne peut pas déterminer pour vous la relation de correspondance entre le formulaire et le papier.
Le document contient des sauts de section continus et l'orientation est anormale.Passer au saut de section de la page suivante et confirmer manuellement le type de sectionLes sauts de section continus sans sauts de page peuvent facilement provoquer un encombrement visuel.

Les sauts de section sont le véritable support des attributs de mise en page

Dans le standard OpenXML, l'élément <w:sectPr> définit la mise en page. Un document peut contenir plusieurs sections, chacune avec sa propre largeur, hauteur, orientation et marges. Lorsque document.add_section() est appelé, python-docx créera un nouveau <w:sectPr> à la fin du document actuel, et le contenu ajouté par la suite appartiendra à cette nouvelle section.

Si vous essayez de changer la direction en modifiant le style de paragraphe ou les propriétés du tableau, cela ne fonctionne généralement pas car ces objets n'ont pas de champs pour stocker les informations de mise en page.

Logique de fonctionnement : divisez d'abord en sections, puis prenez des sections et enfin définissez

  1. Positionnez la plage de contenu qui doit être horizontale.
  2. Assurez-vous que ce contenu est enveloppé dans une section distincte et divisé à l'aide de add_section() si nécessaire.
  3. Créez d'abord toutes les sections, puis obtenez la section cible en fonction de l'index pour éviter de confondre l'objet stub enregistré avant d'ajouter la section comme section d'origine.
  4. Remplacez page_width et page_height par cette section et définissez orientation sur WD_ORIENT.LANDSCAPE.
  5. Après avoir enregistré, relisez le fichier et vérifiez si la direction, la largeur et la hauteur des autres sections restent inchangées.

Notez qu'en définissant uniquement orientation sans permuter la largeur et la hauteur, Word affichera le mauvais format de papier à son ouverture. C’est un point souligné à plusieurs reprises dans cet article.

Exemple de composition autonome

Le code suivant construit l'entrée en mémoire. Toutes les données sont des échantillons synthétiques. Les enregistrements en cours sont uniquement utilisés pour illustrer la logique des appels API et ne représentent pas une garantie de tous les fichiers réels ou effets du produit. La bibliothèque dépendante est python-docx. Veuillez l'exécuter dans un environnement de projet verrouillé. La version doit prendre en charge l'énumération WD_ORIENT (0.8.11 et supérieur).

from docx import Document
from docx.enum.section import WD_ORIENT, WD_SECTION
from io import BytesIO
doc = Document()
doc.add_paragraph("Portrait intro")
doc.add_section(WD_SECTION.NEW_PAGE)
doc.add_paragraph("Landscape middle")
doc.add_section(WD_SECTION.NEW_PAGE)
doc.add_paragraph("Portrait end")
middle = doc.sections[1]
width, height = middle.page_width, middle.page_height
middle.orientation = WD_ORIENT.LANDSCAPE
middle.page_width, middle.page_height = max(width, height), min(width, height)
out = BytesIO()
doc.save(out)
out.seek(0)
restored = Document(out)
assert len(restored.sections) == 3
assert restored.sections[1].orientation == WD_ORIENT.LANDSCAPE
assert restored.sections[1].page_width > restored.sections[1].page_height
assert restored.sections[0].orientation == WD_ORIENT.PORTRAIT
assert restored.sections[2].orientation == WD_ORIENT.PORTRAIT

Scénario de saisie correcte : le document contient trois sections, la première section est du texte vertical, la deuxième section est placée avec des tableaux larges et la troisième section revient à la verticale. Le résultat attendu est que orientation est LANDSCAPE dans la deuxième section, et page_width est supérieur à page_height, et les deux sections restantes restent PORTRAIT.

Boundary input one : Un document avec une seule section. En définissant directement la direction horizontale sur sections[0], l'ensemble du document deviendra horizontal. Vous devez d'abord appeler add_section() pour diviser le contenu, puis exploiter les sections nouvellement générées.

Entrée de limite deux : PAYSAGE est défini mais la taille verticale d'origine est conservée. Le code doit vérifier page_width >= page_height comme prédicat.

📊 Comparaison principale : sauts de page et sauts de section

CheminLe sens de la page peut-il être respecté ?Utilisations typiquesChoses à noter
Saut de pagene peut pasContrôler uniquement l'habillage du contenuNe peut pas être utilisé pour créer une seule page en mode paysage
Saut de section de la page suivantecapablePaysage partiel, marges de changementVous devez définir la largeur, la hauteur et la direction de la section séparément.
saut de section continucapableChanger de mise en page au sein de la même pageNe pas changer de page peut entraîner une confusion visuelle et nécessite un jugement manuel.

🎯 Quelle méthode vous convient ?

si tu……

  • Il n'y a pas de sauts de section avant et après la page cible : divisez d'abord les sections, puis définissez la direction de la section cible.
  • Le document ne comporte qu'une seule section et ne doit être que partiellement horizontal : Appelez d'abord add_section(), ne modifiez pas directement sections[0].
  • Tableau tronqué après orientation paysage : Vérifiez les marges gauche et droite de la section, ou réduisez la largeur du tableau.
  • Le document contient des sauts de section consécutifs : évaluez s'il doit être remplacé par le saut de section de la page suivante et confirmez manuellement.
  • Cryptage de fichiers, dommages à la structure XML ou sections générées dynamiquement par des macros : réparez ou convertissez manuellement le format en premier, le code de cet article n'est pas applicable.

❓ Questions fréquemment posées (FAQ)

1. Pourquoi le sens de la page ne change-t-il pas après avoir défini les attributs du paragraphe ou du tableau ?

Les objets paragraphe et tableau ne disposent pas de champs pour stocker les informations de mise en page. Le sens de la page appartient à l'attribut section, il doit donc être défini via la section correspondant au saut de section.

2. Est-il suffisant de simplement définir l'orientation sur PAYSAGE ?

pas assez. Vous devez également échanger page_width et page_height, sinon le format du papier ne s'affichera pas correctement à l'ouverture de Word et le contenu risque d'être recadré lors de l'exportation du PDF.

3. Pourquoi ne pouvez-vous pas définir directement la direction horizontale sur les sections[0] ?

Si le document ne comporte qu'une seule section, sa modification affectera l'ensemble du document. La transversale partielle doit d'abord être divisée en sections indépendantes à l'aide de add_section().

4. Que dois-je faire si l'en-tête et le pied de page ne sont pas alignés horizontalement ?

Les modifications apportées aux attributs de section n'affectent pas l'état du lien d'en-tête. Vous devez vérifier les paramètres de distance entre l'en-tête et le pied de page séparément. Il s’agit d’une question indépendante.

📝Résumé

La clé pour rendre une page de tableau horizontale uniquement est de placer le contenu cible dans une section distincte et d'échanger la largeur, la hauteur et l'orientation en même temps. Après avoir enregistré, relisez et vérifiez les autres sections. Après vérification du code, vous devez confirmer l'effet à l'œil nu après l'exportation vers Word ou PDF.

Connectez OmniDoc à AI Assistant : générez et modifiez Word, Excel et PPT en une seule phrase

Mis à jour le 2026-11-15