python-docx官方文档翻译--用户指南06--使用页眉和页脚

使用页眉和页脚

Word 支持页眉和页脚。页眉是出现在每页顶部区域的文本,与正文分开,通常传达上下文信息,例如文档标题,作者,创建日期或页码。文档中的页眉在页面之间是相同的,只是内容上的差别很小,例如节标题或页码的变化。页眉也称为 运行头
页脚在所有方面都类似于页眉,只不过它出现在页面底部。不应将其与脚注混淆,脚注在页面之间并不统一。为简便起见,此处经常使用页眉一词来指代页眉或页脚对象,以使读者能够理解其对两种对象类型的适用性。

访问 节(section)的页眉

页眉和页脚链接到一个节;这允许每个节具有不同的页眉和/或页脚。例如,横向节的页眉可能比纵向节的页眉宽。
每个节对象都有一个 .header 属性,可用于访问该节的 _Header 对象:

document = Document()
section = document.sections[0]
header = section.header
header
# <docx.section._Header object at 0x...>

_Header 对象始终存在于 Section.header 上,即使没有为该节定义页眉也是如此。 _Header.is_linked_to_previous 表示是否存在实际的页眉定义:

header.is_linked_to_previous
# True

值为 True 表示 _Header 对象不包含页眉定义,并且该节将显示与上一节相同的页眉。这种 “继承” 行为是递归的,因此 “链接的” 页眉实际上是从具有页眉定义的第一个先前节中获得其定义的。在 Word UI 中,此 “链接” 状态指示为 “与先前相同”。
新文档没有页眉(在包含的单个节上),因此在这种情况下 .is_linked_to_previous 为 True。请注意,这种情况可能有点违反直觉,因为没有先前的页眉可链接。在这种“没有上一个页眉”的情况下,不显示任何页眉。

添加页眉(简单情况)

只需编辑 _Header 对象的内容,即可将页眉添加到新文档中。_Header 对象是“情节”容器,其内容就像 Document 对象一样被编辑。请注意,像新文档一样,新页眉已经包含一个(空)段落:

paragraph = header.paragraphs[0]
paragraph.text = "文档标题"

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

header.is_linked_to_previous
# False
添加“分区”页眉内容

具有多个“区域”的页眉通常是使用精心放置的制表位来完成的。
居中和右对齐“区域”所需的制表位是Word中页眉和页脚样式的一部分。如果您使用的是自定义模板而不是 python-docx 的默认模板,则在模板中定义该样式可能很有意义。
插入的制表符(“ \ t”)用于分隔左,中和右对齐的页眉内容:

paragraph = header.paragraphs[0]
paragraph.text = "左对齐文本\t居中文本\t右对齐文本"
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 时,标题的内容将不可撤消地删除。

了解多节(section)文档中的页眉

“刚开始编辑”方法在简单情况下效果很好,但是要弄清多节文档中的页眉行为,一些简单的概念会有所帮助。

  1. 每个节都可以有自己的页眉定义(但不必如此)。
  2. 缺少页眉定义的节将继承前节的页眉。 _Header.is_linked_to_previous 属性仅反映页眉定义的存在;存在定义时为 False,否则显示为 True。
  3. 缺少页眉定义是默认状态。新文档没有定义的页眉,新插入的节也没有。 .is_linked_to_previous 属性在这两种情况下均为True。
  4. 如果 _Header 对象具有页眉定义,则其内容为其自身的内容。否则,其内容为第一先前节定义的页眉内容。如果没有节具有页眉定义,则在第一个节上添加一个新的页眉定义,其他所有节都继承该页眉定义。页眉定义的这种添加发生在第一次访问页眉内容时,可能是通过引用 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

新添加的页眉定义包含一个空的段落。请注意,以这种方式离开页眉有时会很有用,因为它可以有效地“关闭”该节以及随后的节的页眉,直到下一个具有已定义页眉的节。
为已经具有页眉定义的页眉上的 .is_linked_to_previous 分配 False 不会执行任何操作。

自动定位继承内容

如果存在任何“继承”关系,则编辑页眉的内容会编辑源页眉的内容。因此,例如,如果第2节页眉从第1节继承而编辑第2节页眉,则实际上是在更改第1节页眉的内容。除非首先为它的 .is_linked_to_previous 属性显式分配 False,否则不会为第2节添加新的页眉定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值