1.插入节

Word可以把文档分成不同的部分方便管理,即不同的节,在python-docx把节用Section对象表示,Document对象有add_section()方法添加节,可以通过sections属性获取所以节。值得注意的是,Document对象没有默认的段落,但有一个默认的节

from docx import Document
from docx.enum.section import WD_SECTION_START

doc = Document()
print(len(doc.paragraphs))  # 0,没有默认段落
print(len(doc.sections))  # 1,有默认节
default_section = doc.sections[0]  # 获取默认节
new_section = doc.add_section(start_type=WD_SECTION_START.NEW_PAGE)  # 新增一个节,类型是新页的分隔符
new_section.start_type = WD_SECTION_START.EVEN_PAGE

# WD_SECTION_START.CONTINUOUS  连续分节符,枚举值0
# WD_SECTION_START.NEW_COLUMN  新列分节符,枚举值1
# WD_SECTION_START.NEW_PAGE    新页分节符,枚举值2
# WD_SECTION_START.EVEN_PAGE   偶数页分节符,枚举值3
# WD_SECTION_START.ODD_PAGE    奇数页分节符,枚举值4

for section in doc.sections:
    print(section.start_type)

如果插入节不指定节的类型,默认是WD_SECTION_START.NEW_PAGE,即新页节,另外还有连续分节符、奇数页、偶数页等常用节的类型都有枚举值,传入对应的数字也是可以的,例如WD_SECTION_START.NEW_PAGE可以用2代替

2.自定义纸张大小
from docx import Document
from docx.shared import Cm

doc = Document("./test.docx")
default_section = doc.sections[0]
# 默认宽度和高度
print(default_section.page_width.cm)  # 21.59
print(default_section.page_height.cm)  # 27.94
# 可直接修改宽度和高度,即纸张大小改为自定义
default_section.page_width = Cm(30)
default_section.page_height = Cm(20)

doc.save("./test.docx")
3.纸张方向

Section对象的orientation控制纸张的方向,WD_ORIENTATION枚举类型有PORTRAIT和LANDSCAPE 分别表示纵向和横向,可以用数字0和1代替。默认是纵向(PORTRAIT),值得注意的是,如果要改为横向,除了修改orientation还需要手动调换一下Section的宽度和高度才行

...
print(default_section.orientation)  # 默认是PORTRAIT,即纵向
default_section.orientation = WD_ORIENTATION.LANDSCAPE  # 改为横向
# 需要手动互换高度和宽带
default_section.page_width, default_section.page_height = default_section.page_height, default_section.page_width
4.页边距

Section对象分别用top_margin、right_margin、bottom_margin、left_margin来表示上左下右四个边距

print(default_section.top_margin.cm)  # 2.54
print(default_section.right_margin.cm)  # 3.175
print(default_section.bottom_margin.cm)  # 2.54
print(default_section.left_margin.cm)  # 3.175
# 修改页边距
default_section.top_margin = Cm(2.5)
default_section.right_margin = Cm(3)
default_section.bottom_margin = Cm(2.5)
default_section.left_margin = Cm(3)
5.装订线

Section对象的gutter属性代表装订线的位置,可以直接修改

# 默认装订线是0
print(default_section.gutter)
# 修改装订线为1厘米
default_section.gutter = Cm(1)
6.页眉页脚

Section对象的header属性和footer属性分别获取到页眉和页脚,页眉页脚的使用方式是一样的

doc = Document()
default_section = doc.sections[0]
section2 = doc.add_section()

# 页眉
header = section2.header  # 获取章节的页眉
print(header.is_linked_to_previous)  # 默认是链接到上一节
header.is_linked_to_previous = False  # 取消链接到上一节,即不使用上一章节的样式
header.paragraphs[0].add_run("第二章节的页眉")  # 添加页眉文本
header.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 页眉样式,居中对齐
print(section2.header_distance.cm)  # 页眉到顶端的距离,默认是1.27
section2.header_distance = Cm(1.5)  # 修改页眉到顶端的距离

# 页脚
footer = section2.footer  # 获取章节的页脚
footer.is_linked_to_previous = True  # 使用上一章节的页脚样式
footer.paragraphs[0].add_run("这是页脚文本")  # 添加页脚文本
footer.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.LEFT  # 页脚,居左对齐
print(section2.footer_distance.cm)  # 页脚到底端的距离,默认是1.27
section2.footer_distance = Cm(1.5)  # 修改页脚到底端的距离
7.首页相同和奇偶页不同

首页相同和奇偶页不同设置很简单,就修改一下属性的布尔值,但要注意一下优先级,如果在不同情况都对Section设置了样式,优先级是,首页不同>奇偶页>普通页

# 首页不同,默认是False,即默认首页相同
section2.different_first_page_header_footer = True

# 奇偶页不同,默认是False,即默认奇偶页相同
doc.settings.odd_and_even_pages_header_footer = True
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐