使用页眉和页脚

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_previousTrue 那样的话。注意这个例子可能有点违反直觉 没有上一节标题 链接到。在这种“无前一个标题”的情况下,不显示标题。

添加页眉(简单案例)

只需编辑 _Header object. A |_ Header | object是一个“story”容器,其内容的编辑方式与 |Document| 对象。请注意,与新文档一样,新标题已经包含一个(空)段落:

>>> paragraph = header.paragraphs[0]
>>> paragraph.text = "Title of my document"
../_images/hdrftr-01.png

还要注意添加内容的行为(甚至只是访问 header.paragraphs )添加了标头定义并更改了的状态 .is_linked_to_previous ::

>>> header.is_linked_to_previous
False

添加“分区”标题内容

带有多个“区域”的标题通常是通过仔细放置的制表位来完成的。

中心和右对齐“区域”所需的制表位是 HeaderFooter Word中的样式。如果使用自定义模板而不是 python-docx 默认情况下,在模板中定义该样式可能是有意义的。

插入的制表符 ("\t" )用于分隔左对齐、居中对齐和右对齐的页眉内容:

>>> paragraph = header.paragraphs[0]
>>> paragraph.text = "Left Text\tCenter Text\tRight Text"
>>> paragraph.style = document.styles["Header"]
../_images/hdrftr-02.png

这个 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”方法对于简单的情况很有效,但是要理解多节文档中的头行为,一些简单的概念将很有帮助。简而言之,它们是:

  1. 每个部分都可以有自己的头定义(但不必如此)。

  2. 缺少头定义的节继承其前面的节的头。这个 _Header.is_linked_to_previous 属性只反映头定义的存在, False 当定义存在且 True 当不是的时候。

  3. 缺少头定义是默认状态。新文档没有定义的头,新插入的节也没有。 .is_linked_to_previous 报告 True 在这两种情况下。

  4. 的内容。 _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 财产。