【python-docx】插入节、自定义纸张大小、纸张方向、页边距、装订线、页眉页脚、首页相同和奇偶页不同
Word可以把文档分成不同的部分方便管理,即不同的节,在python-docx把节用Section对象表示,Document对象有add_section()方法添加节,可以通过sections属性获取所以节。值得注意的是,Document对象没有默认的段落,但有一个默认的节如果插入节不指定节的类型,默认是WD_SECTION_START.NEW_PAGE,即新页节,另外还有连续分节符、奇数页、偶数
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)