【python-docx 04】对章节操作

Word支持章节的概念,即具有相同页面布局的文档的分区。
例如:页边距和页面方向。
例如,这是一种文档可以包含纵向布局中的某些页面以及横向上的其他页面的方式。

大多数Word文档只有默认的单个部分,而且大部分都没有理由更改默认边距或其他页面布局。但是当您确实需要更改页面布局时,您需要了解部分才能完成它。

访问章节

Document对象的sections属性提供对文档章节的访问:

>>> document = Document()
>>> sections = document.sections
>>> sections
<docx.parts.document.Sections object at 0x1deadbeef>
>>> len(sections)
3
>>> section = sections[0]
>>> section
<docx.section.Section object at 0x1deadbeef>
>>> for section in sections:
...     print(section.start_type)
...
NEW_PAGE (2)
EVEN_PAGE (3)
ODD_PAGE (4)

从理论上讲,文档可能没有任何明确的部分。但是如果正在访问不可预测的.docx文件,你可能希望使用len()检查或try方法来避免IndexError异常意外停止程序。

添加新章节

Document.add_section()方法允许在文档末尾开始新的部分。
调用此方法后添加的段落和表格将显示在新部分中:

from  docx.enum.section import WD_SECTION_START
current_section = document.sections[-1]  # 文档最后一个章节
new_section = document.add_section(WD_SECTION_START.ODD_PAGE)
章节属性

Section对象有11个属性,允许找到和指定页面布局设置。

章节开始类型

Section.start_type描述了该章节与之前的中断类型,start_type的值是WD_SECTION_START中的的方法:

>>> from  docx.enum.section import WD_SECTION_START
>>> section.start_type
NEW_PAGE (2)
>>> section.start_type = WD_SECTION_START.ODD_PAGE
>>> section.start_type
ODD_PAGE (4)
页面尺寸和方向

Section有三个属性描述页面尺寸和方向。
例如,这些可以用于将章节的方向从纵向更改为横向:

from  docx.enum.section import WD_ORIENTATION

print(section.orientation, section.page_width, section.page_height)
# (PORTRAIT (0), 7772400, 10058400)  # (Inches(8.5), Inches(11))
new_width, new_height = section.page_height, section.page_width
section.orientation = WD_ORIENTATION.LANDSCAPE
section.page_width = new_width
section.page_height = new_height
print(section.orientation, section.page_width, section.page_height)
# (LANDSCAPE (1), 10058400, 7772400)
页边距

Section有七个属性一起指定了确定文本在页面上出现位置的各种边距:

from docx.shared import Inches

print(section.left_margin, section.right_margin)
#(1143000, 1143000)  # (Inches(1.25), Inches(1.25))
print(section.top_margin, section.bottom_margin)
# (914400, 914400)  # (Inches(1), Inches(1))
print(section.gutter)
# 0
print(section.header_distance, section.footer_distance)
# (457200, 457200)  # (Inches(0.5), Inches(0.5))
section.left_margin = Inches(1.5)
section.right_margin = Inches(1)
print(section.left_margin, section.right_margin)
# (1371600, 914400)

你可能感兴趣的:(Python,python-docx,python操作word)