Para la misma página de tabla horizontal en Word, no cambie la orientación de todo el artículo.
En el mismo documento de Word, sólo la página de la tabla debe estar en orientación horizontal. No cambie todo el artículo a orientación horizontal. Este artículo primero crea todas las secciones, luego recupera la sección de destino por índice, establece la dirección y el ancho y alto de la página respectivamente, guarda y vuelve a leer, y confirma que ninguna de las otras secciones ha sido modificada.
Cuando solo ciertas páginas de un documento de Word necesitan tener orientación horizontal, el error más común es cambiar directamente todo el documento a orientación horizontal o rotar la tabla y luego recortar el contenido. Este artículo está dirigido a desarrolladores y equipos de documentos que necesitan usar python-docx para manejar automáticamente el diseño de Word. Explica cómo cambiar únicamente la orientación de la página de la sección de destino.
La clave para comprenderlo es distinguir entre saltos de página y saltos de sección. Los saltos de página solo controlan los saltos de línea y no incluyen la orientación de la página, el tamaño del papel ni los márgenes; estas propiedades de diseño están vinculadas a la "sección". Después de leer este artículo, primero debería poder crear todas las secciones, luego extraer la sección de destino por índice, establecer la dirección, el ancho y el alto respectivamente, y volver a leer después de guardar para confirmar que no se han modificado otras secciones. Para obtener detalles de la API relacionados con la sección, consulte python-docx Documentación oficial de las secciones.
Conclusión en una frase: Word sólo hace que las páginas de la tabla sean horizontales. ¿Cómo configurarlo?
Cree solo una sección separada para el contenido que debe ser horizontal, intercambie el ancho y el alto y establezca la dirección en esta sección, y mantenga las otras secciones verticales.
| tu situación | Prácticas recomendadas | razón |
|---|---|---|
| No hay saltos de sección antes y después de la página de destino. | Primero use add_section() para dividir, luego establezca la dirección | Los atributos de diseño se almacenan en secciones. No puede cambiar solo la página de destino sin dividir las secciones. |
| Solo se establece LANDSCAPE pero el ancho y el alto no se intercambian | Intercambie page_width y page_height simultáneamente | Simplemente cambiar la orientación dará como resultado un tamaño de papel incorrecto y es posible que el contenido se recorte al exportar PDF. |
| La tabla todavía está truncada después de configurar la orientación horizontal. | Verifique los márgenes izquierdo y derecho de la sección o reduzca el ancho de la tabla | El código no puede determinar la relación de coincidencia entre el formulario y el documento. |
| El documento contiene saltos de sección continuos y la orientación es anormal. | Cambie al salto de sección de la página siguiente y confirme manualmente el tipo de sección | Los saltos de sección continuos sin saltos de página pueden causar fácilmente desorden visual. |
Los saltos de sección son los verdaderos portadores de los atributos de diseño
En el estándar OpenXML, el elemento <w:sectPr> define el diseño de la página. Un documento puede contener varias secciones, cada una con su propio ancho, alto, orientación y márgenes. Cuando se llama a document.add_section(), python-docx creará un nuevo <w:sectPr> al final del documento actual y el contenido agregado posteriormente pertenecerá a esta nueva sección.
Si intenta cambiar la orientación modificando estilos de párrafo o propiedades de tabla, normalmente no funciona porque estos objetos no tienen campos para almacenar información de diseño.
Lógica de operación: primero dividir en secciones, luego tomar secciones y finalmente configurar
- Coloque el rango de contenido que debe ser horizontal.
- Asegúrese de que este contenido esté incluido en una sección separada y divídalo usando
add_section()si es necesario. - Primero cree todas las secciones y luego obtenga la sección de destino de acuerdo con el índice para evitar confundir el objeto resguardado antes de agregar la sección como la sección original.
- Cambie
page_widthypage_heightpara esta sección y configureorientationenWD_ORIENT.LANDSCAPE. - Después de guardar, vuelva a leer el archivo y verifique si la dirección, el ancho y el alto de otras secciones permanecen sin cambios.
Tenga en cuenta que al configurar únicamente orientation sin intercambiar el ancho y el alto, Word mostrará el tamaño de papel incorrecto cuando se abra. Este es un punto que se enfatiza repetidamente en este artículo.
Ejemplo de composición autónoma
El siguiente código construye la entrada en la memoria. Todos los datos son muestras sintéticas. Los registros en ejecución solo se utilizan para ilustrar la lógica de llamada a la API y no representan una garantía de todos los archivos reales o efectos del producto. La biblioteca dependiente es python-docx. Ejecútelo en un entorno de proyecto bloqueado. La versión debe admitir la enumeración WD_ORIENT (0.8.11 y superior).
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
Escenario de entrada correcto: el documento contiene tres secciones, la primera sección es texto vertical, la segunda sección está colocada con tablas anchas y la tercera sección vuelve a ser vertical. El resultado esperado es que orientation sea PAISAJE en la segunda sección, y page_width sea mayor que page_height, y las dos secciones restantes sigan siendo RETRATO.
Entrada de límite uno: Un documento con una sola sección. Establecer directamente la dirección horizontal en sections[0] hará que todo el documento se vuelva horizontal. Primero debe llamar a add_section() para dividir el contenido y luego operar las secciones recién generadas.
Entrada de límite dos: se establece PAISAJE pero se conserva el tamaño vertical original. El código debe verificar page_width >= page_height como predicado.
📊 Comparación principal: saltos de página y saltos de sección
| Forma | ¿Se puede llevar la dirección de la página? | Usos típicos | Cosas a tener en cuenta |
|---|---|---|---|
| Salto de página | no puedo | Controlar solo el ajuste de contenido | No se puede utilizar para hacer una sola página en formato horizontal. |
| Salto de sección de la página siguiente | capaz | Paisaje parcial, márgenes cambiantes | Debe establecer el ancho, el alto y la dirección de la sección por separado. |
| salto de sección continuo | capaz | Cambiar diseños dentro de la misma página | No cambiar las páginas puede causar confusión visual y requiere juicio manual. |
🎯 ¿Qué método es el adecuado para ti?
si usted……
- No hay saltos de sección antes y después de la página de destino: primero divida las secciones y luego establezca la dirección de la sección de destino.
- El documento tiene solo una sección y solo necesita estar parcialmente horizontal: Llame primero a
add_section(), no modifiquesections[0]directamente. - Tabla truncada después de la orientación horizontal: compruebe los márgenes izquierdo y derecho de la sección o reduzca el ancho de la tabla.
- El documento contiene saltos de sección consecutivos: Evalúe si se debe cambiar al salto de sección de la página siguiente y confirme manualmente.
- Cifrado de archivos, daños en la estructura XML o secciones generadas dinámicamente por macros: primero repare o convierta el formato manualmente; el código de este artículo no es aplicable.
❓ Preguntas frecuentes (FAQ)
1. ¿Por qué la dirección de la página no cambia después de configurar los atributos de párrafo o tabla?
Los objetos de párrafo y tabla no tienen campos para almacenar información de diseño. La dirección de la página pertenece al atributo de la sección, por lo que debe establecerse a través de la sección correspondiente al salto de sección.
2. ¿Es suficiente simplemente establecer la orientación en PAISAJE?
no es suficiente. También debe intercambiar page_width y page_height; de lo contrario, el tamaño del papel se mostrará incorrectamente cuando se abra Word y el contenido puede recortarse al exportar PDF.
3. ¿Por qué no puedes establecer directamente la dirección horizontal en las secciones [0]?
Si el documento tiene una sola sección, modificarla afectará a todo el documento. La transversal parcial debe dividirse en secciones independientes usando add_section() primero.
4. ¿Qué debo hacer si el encabezado y el pie de página están desalineados horizontalmente?
Los cambios en los atributos de la sección no afectan el estado del enlace del encabezado. Debe verificar la configuración de distancia entre el encabezado y el pie de página por separado. Este es un tema independiente.
📝 Resumen
La clave para hacer que una página de tabla sea solo horizontal es colocar el contenido de destino en una sección separada e intercambiar el ancho, el alto y la orientación al mismo tiempo. Después de guardar, vuelva a leer y consultar otras secciones. Después de la verificación del código, debe confirmar el efecto a simple vista después de exportarlo a Word o PDF.
Conecte OmniDoc al asistente de IA: genere y modifique Word, Excel y PPT en una sola frase


