初识word文档-节-的概念
编辑一篇word文档,往往首先从页面设置开始,从下图可以看出,页面设置常操作的有页边距、纸张方向、纸张大小4个,而在word中是以节(section)来分大的块,每一节的页面设置可以不同。所以在python-docx中也是一样,当前节的各项属性全部保存在当前的section中,要想设置当前节的页面就从了解section的各个属性应用开始吧。
如果用python-docx新建一个空白文档,那么默认是只有一个节
1
2
3
4
|
>>> import docx
>>> doc = docx.Document()
>>> len (doc.sections)
1
|
,如果要增加节可以用doc.add_section()来完成。
1
2
3
4
5
6
7
8
|
>>> import docx
>>> doc = docx.Document()
>>> len (doc.sections)
1
>>> doc.add_section()
<docx.section.Section object at 0x000001F27F85E370 >
>>> len (doc.sections)
2
|
了解了节之后我们开始来对节的页面进行设置。
设置页边距
在python-docx包中常用页边距属性存在section的以下4个属性中:
section.top_margin
:上页边距
section.bottom_margin
:下页边距
section.left_margin
:左页边距
section.right_margin
:右页边距
页边距的值以厘米(cm)为单位,让我们来看看刚才第二节的默认的页边距是多少
1
2
|
>>> print ( '上' ,doc.sections[ 1 ].top_margin.cm, '下' ,doc.sections[ 1 ].bottom_margin.cm, '左' ,doc.sections[ 1 ].left_margin.cm, '右' ,doc.sections[ 1 ].right_margin.cm)
上 2.54 下 2.54 左 3.175 右 3.175
|
注,这里的sections[1]是第二节。
下面把页边距设置成我们公文常用的5678页面距
1
2
3
4
5
|
>>> from docx.shared import Cm
>>> doc.sections[ 1 ].top_margin = Cm( 3.7 )
>>> doc.sections[ 1 ].bottom_margin = Cm( 3.5 )
>>> doc.sections[ 1 ].left_margin = Cm( 2.8 )
>>> doc.sections[ 1 ].right_margin = Cm( 2.6 )
|
这里要先导入docx中定义单位的Cm,后面常用的单位还有Pt 也是这个块导入。
另外 页边距属性还有3个不常用的就是装订线,页眉、页脚边距分别为:section.gutter,section.header_distance, section.footer_distance
,设置方法同上,不再赘述。需要说明的是装订线还有一个位置属性,暂时未发现如何设置,默认为左,如果需求设置成右,可以建个模板docx文档导入。
设置纸张方向和大小
Section中的三个属性描述了页面方向和尺寸。分别为:section.orientation, section.page_width, section.page_height
纸张大小设置单位我习惯用cm,设置同页边距。
这里要特别说下orientation,即纸张方向,也是要设置的,不能说你把纸张宽度设置宽了,高度设置低了纸张就变成横向了,会影响打印等。
纸张方向的值是docx.enum.section.WD_ORIENTATION中枚举类型的2常量来设置的。分别为:
WD_ORIENTATION.LANDSCAPE
:纸张方向为横向。
WD_ORIENTATION.PORTRAIT
:纸张方向为纵向。
先查看下:
1
2
3
4
5
6
|
>>> doc.sections[0].page_height.cm
27.94
>>> doc.sections[0].page_width.cm
21.59
>>> doc.sections[0].orientation
0
|
默认的是信纸大小,横向
设置成我们常用的A4纸大小下:
1
2
3
4
5
6
7
8
|
from docx.shared import Cm
from docx.enum.section import WD_ORIENTATION
doc.sections[ 0 ].page_height = Cm( 29.7 ) # 设置A4纸的高度
doc.sections[ 0 ].page_width = Cm( 21 ) # 设置A4纸的宽
doc.sections[ 0 ].orientation = WD_ORIENTATION.PORTRAIT # 设置纸张方向为横向,可以不设置 默认为横向
doc.sections[ 1 ].page_height = Cm( 21 ) # 设置A4纸的高度
doc.sections[ 1 ].page_width = Cm( 29.7 ) # 设置A4纸的宽
doc.sections[ 1 ].orientation = WD_ORIENTATION.LANDSCAPE # 设置纸张方向为纵向
|
设置分栏
有些时候我们还要在某些节中分栏,给节设置分栏的语句比较固定,就是更改section的一个私有属性。先导入docx.oxml.ns.qn,然后一句话搞定
1
2
|
from docx.oxml.ns import qn
doc.sections[ 1 ]._sectPr.xpath( './w:cols' )[ 0 ]. set (qn( 'w:num' ), '2' ) #把第二节设置为2栏
|
想设置成几栏 把‘2'就改成几。
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://www.cnblogs.com/wenshi-jj/p/15388808.html