在WORD软件中对页面设置一般要先让光标移动到页面上,然后点击“页面布局”菜单的“页面设置”功能区进行设置,或者在“页面设置”属性框中设置,见下图。而在Python-docx包中要使用section对象中page_height、page_width、orientation、top_margin等属性来实现对页面大小,纸张,方向,页边距和装订线的设置。笔者将详细叙述使用python-docx包中对docx文档页面设置功能的实现,最后制作了思维导图。

WORD软件中页面设置

01页面大小

在python-docx包中要使用section.page_width和section.page_height属性来实现页面大小的读取和设置。在本文中由于要设置长度,所以要导入docx.shared. Cm等单位换算函数。例如:

from docx import Document # 导入docx包from docx.shared import Cm, Inches, Pt # 导入单位换算函数document = Document() # 新建word文档section = document.sections[0] # 获取section对象print('默认页面的宽度和高度:', section.page_width.cm,section.page_height.cm) # 打印默认页面宽度和高度section.page_width = Cm(40)section.page_height = Cm(40)print('修改后页面的宽度和高度:', section.page_width.cm,section.page_height.cm) # 打印修改后的页面宽度和高度document.save('test.docx') # 保存word文档打印默认页面大小结果如下图

页面大小修改前后结果图

修改后的效果见下图

页面大小修改后效果图

纸张默认大小同WORD软件中内置的信纸纸张大小相同。通过修改section.page_width和section.page_height属性的值将页面大小调整为高度40cm,宽度40cm。此时页面纸张大小类型为“自定义大小”。

02设置纸张

在Word软件中内置了很多纸张参数。那么笔者将以设置A4纸的形式演示使用python-docx设置纸张,见如下代码:

section.page_width = Cm(21) # 设置A4纸的宽度section.page_height = Cm(29.7) # 设置A4纸的高度运行后文档的效果见下图:

设置A4纸张效果图

只要将section.page_width和section.page_height属性按照A4纸的宽度和高度进行设置,WORD软件就会自动识别成A4纸。在WROD软件中内置很多中纸张的参数,可以通过“页面布局”菜单中“页面设置”功能区的“纸张大小”中进行查询,见下图:

WORD软件中内置纸张参数

03设置纸张方向

在Python-docx包中section.orientation属性可以设置纸张方向,这要使用docx.enum.section.WD_ORIENTATION中枚举类型的常量。WD_ORIENTATION共有2个常量,含义如下:

WD_ORIENTATION.LANDSCAPE:纸张方向为横向。WD_ORIENTATION.PORTRAIT:纸张方向为纵向。在Word文档中默认设置为纵向(PORTRAIT)。在python-docx包中如果只设置orientation属性,页面并不会改变方向。因为设置orientation属性并不会改变section.page_width和section.page_height属性值,页面也就不会发生变化。如下代码演示了将纸张从纵向设置为横向:

from docx.enum.section import WD_ORIENTATIONsection.orientation = WD_ORIENTATION.LANDSCAPE # 不会出现A4 旋转page_h, page_w = section.page_width, section.page_heightsection.page_width = page_w # 设置横向A4纸的宽度section.page_height = page_h # 设置横向A4纸的高度改变页面方向后的效果如下图:

更纸张访问为横向效果图

更改成横向纸张大小图

文档的纸张方向成功更改成了横向,纸张仍然是A4。既然只有将纸张的section.page_width和section.page_height属性进行修改才能显示更改的纸张方向,那么不设置orientation属性,只设置section.page_width和section.page_height属性会不会也能起到改变纸张方向的效果那?代码修改如下:

page_h, page_w = section.page_width, section.page_height # 提取页面的高度和宽度section.page_width = page_w # 设置A4纸的宽度,section.page_height = page_h # 设置A4纸的高度只改变纸张的宽度和高度,效果图如下

只改变页面的大小

此时文档从效果上看确实是改成了横向。此时查看纸张的方向,仍然是纵向,纸张大小却是“A4 旋转”。从效果上看只设置section.page_width和section.page_height属性也能起到改变纸张方向的效果。

04设置页面边距

在python-docx包中设置页边距要用到section.top_margin、section.bottom_margin、section.left_margin和section.right_margin四个属性。含义如下:

section.top_margin:上页边距section.bottom_margin:下页边距section.left_margin:左页边距section.right_margin:右页边距只需读取或者改变这四个属性的值就可以实现对页边距读取和设置,代码如下:

print("页面上边距:", section.top_margin.cm)print("页面下边距:", section.bottom_margin.cm)print("页面左边距:", section.left_margin.cm)print("页面右边距:", section.right_margin.cm)# 修改后section.top_margin = Cm(5)section.bottom_margin = Cm(5)section.left_margin = Cm(4)section.right_margin = Cm(4)页面边距测试结果图下图

页边距设置结果图

页边距更改效果如下图

页边距更改后的效果图

docx文档中默认页边距是上、下边距为2.54cm,左、右边距为3.175cm,更改后上下、页边距变成了5cm,左、右页边距变成了4cm。

05设置装订线

使用section.gutter属性可以设置装订线的位置,将装订线的位置设置为1cm代码如下:

print('设置装订前', section.gutter.cm)section.gutter = Cm(1)print('设置装订线后:', section.gutter.cm)运行结果如下图

装订线设置后的结果图

设置1cm装订线的文档效果如下图

设置1cm装订线的文档效果图

页面中默认装订线是0cm,经过设置后文档的装订线位置更改为了1cm。

笔记先后总结了页面大小、纸张设置、页边距和装订线4个部分部分,制作了思维导图,见下图。希望为使用python-docx包进行页面设置的同行提供参考。

python-docx页面设置

更多推荐

pythondocx_python-docx页面设置