使用页眉和页脚¶
Word支持 页眉 和 页脚 . 页眉是出现在每一页的上页边距区域的文本,与正文分开,通常传递上下文信息,例如文档标题、作者、创建日期或页码。文档中的页眉在每一页中都是相同的,只是在内容上有一些细微的差异,例如更改了节标题或页码。页眉也称为页眉 流动头 .
A page footer 在任何方面都类似于页眉,只是它显示在页面的底部。它不应与脚注混淆,因为脚注在页面之间并不一致。为了简洁起见,术语 header 在这里经常用来指可能是页眉或页脚对象的对象,相信读者能够理解它对这两种对象类型的适用性。
访问节的标题¶
页眉和页脚链接到 section ;这允许每个部分具有不同的页眉和/或页脚。例如,横向部分可能比纵向部分具有更宽的页眉。
每个截面对象都有一个 .header
提供访问 _Header
该节的对象:
>>> document = Document()
>>> section = document.sections[0]
>>> header = section.header
>>> header
<docx.section._Header object at 0x...>
A _Header
对象为 always present on Section.header
, even when no header is defined for that section. The presence of an actual header definition is indicated by _ Header.is_link_to_previous
::
>>> header.is_linked_to_previous
True
一个值 True
表示 _Header
对象不包含标题定义,节将显示与上一节相同的标题。这种“继承”行为是递归的,因此“链接”头实际上从具有头定义的前一个部分获得其定义。此“链接”状态表示为 “与上一个相同” 在单词UI中。
新文档没有标题(在它包含的单个节上),因此 .is_linked_to_previous
是 True
那样的话。注意这个例子可能有点违反直觉 没有上一节标题 链接到。在这种“无前一个标题”的情况下,不显示标题。
添加页眉(简单案例)¶
只需编辑 _Header
object. A |_ Header | object是一个“story”容器,其内容的编辑方式与 |Document| 对象。请注意,与新文档一样,新标题已经包含一个(空)段落:
>>> paragraph = header.paragraphs[0]
>>> paragraph.text = "Title of my document"
还要注意添加内容的行为(甚至只是访问 header.paragraphs
)添加了标头定义并更改了的状态 .is_linked_to_previous
::
>>> header.is_linked_to_previous
False
添加“分区”标题内容¶
带有多个“区域”的标题通常是通过仔细放置的制表位来完成的。
中心和右对齐“区域”所需的制表位是 Header
和 Footer
Word中的样式。如果使用自定义模板而不是 python-docx 默认情况下,在模板中定义该样式可能是有意义的。
插入的制表符 ("\t"
)用于分隔左对齐、居中对齐和右对齐的页眉内容:
>>> paragraph = header.paragraphs[0]
>>> paragraph.text = "Left Text\tCenter Text\tRight Text"
>>> paragraph.style = document.styles["Header"]
这个 Header
样式会自动应用于新的标题,因此上面的第三行(应用 Header
样式)在这种情况下是不必要的,但是这里包含在这里以说明一般情况。
移除页眉¶
不需要的标题可以通过分配 True
对其 .is_linked_to_previous
属性:
>>> header.is_linked_to_previous = True
>>> header.is_linked_to_previous
True
当 True
分配给 .is_linked_to_previous
.
了解多节文档中的标题¶
“just start editing”方法对于简单的情况很有效,但是要理解多节文档中的头行为,一些简单的概念将很有帮助。简而言之,它们是:
每个部分都可以有自己的头定义(但不必如此)。
缺少头定义的节继承其前面的节的头。这个
_Header.is_linked_to_previous
属性只反映头定义的存在,False
当定义存在且True
当不是的时候。缺少头定义是默认状态。新文档没有定义的头,新插入的节也没有。
.is_linked_to_previous
报告True
在这两种情况下。的内容。
_Header
对象是它自己的内容,如果它有标头定义。如果不是,则其内容为前一节的内容 does 有一个标题定义。如果没有节有标题定义,则在第一节上添加一个新的标题定义,并且所有其他节都继承该标题定义。在第一次访问标题内容时添加标题定义,可能是通过引用header.paragraphs
。
添加标头定义(一般情况)¶
显式的头定义可以通过指定 False
对其 .is_linked_to_previous
属性:
>>> header.is_linked_to_previous
True
>>> header.is_linked_to_previous = False
>>> header.is_linked_to_previous
False
新添加的标题定义包含一个空段落。请注意,以这种方式保留标题有时是有用的,因为它可以有效地“关闭”该部分及其后面的标题,直到下一个具有已定义标头的节。
分配 False
到 .is_linked_to_previous
在已经有标头定义的标头上不执行任何操作。
自动定位继承的内容¶
编辑页眉的内容会编辑 source 标头,考虑到任何“继承”。因此,例如,如果第2节标题继承自第1节,而您编辑第2节标题,则实际上更改了第1节标题的内容。不会为第2节添加新的标题定义,除非您首先显式指定 False
至ITS .is_linked_to_previous
财产。