Python Docx - Sections - Page Orientation

Jesse picture Jesse · Aug 8, 2015 · Viewed 7.9k times · Source

The following code tries to use landscape orientation, but the document is created as potrait.
Can you suggest where the problem is?

from docx import Document
from docx.enum.section import WD_ORIENT

document = Document()

section = document.sections[-1]
section.orientation = WD_ORIENT.LANDSCAPE

document.add_heading('text')
document.save('demo.docx')

When I read the code back as XML

<w:document>
    <w:body>
       <w:p>
          <w:pPr>
             <w:pStyle w:val="Heading1"/>
          </w:pPr>
          <w:r>
              <w:t>TEXT</w:t>
          </w:r>
       </w:p>
       <w:sectPr w:rsidR="00FC693F" w:rsidRPr="0006063C" w:rsidSect="00034616">
           <w:pgSz w:w="12240" w:h="15840" w:orient="landscape"/>
           <w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/>
           <w:cols w:space="720"/>
           <w:docGrid w:linePitch="360"/>
        </w:sectPr>
    </w:body>
 </w:document>

I don't know XML well by assume the section tags should come above the TEXT tags at the top rather than the bottom????

Answer

Dragon picture Dragon · Jun 7, 2016

Whilst the page is correctly tagged as landscape, its dimensions remain the same as before and must be manually changed.

http://python-docx.readthedocs.io/en/latest/user/sections.html

Page dimensions and orientation

Three properties on Section describe page dimensions and orientation. Together these can be used, for example, to change the orientation of a section from portrait to landscape:

...

new_width, new_height = section.page_height, section.page_width section.orientation = WD_ORIENT.LANDSCAPE section.page_width = new_width section.page_height = new_height