使用python-docx处理word.docx文件(5)

使用页眉和页脚

Word支持页眉页脚页眉是出现在每页顶部区域的文本,与正文分开,通常传达上下文信息,例如文档标题,作者,创建日期或页码。文档中的页面标题在页面之间是相同的,只是内容上的差别很小,例如节标题或页码的变化。页面标题也称为运行头

一个页面页脚中的每个日日夜夜,只不过它出现在页面底部的页头类似。请勿将其与脚注混淆,脚注在页面之间并不统一。为简便起见,此处经常使用标头一词来指代标头或页脚对象,以使读者能够理解其对两种对象类型的适用性。

访问节的标题

页眉和页脚链接到一个 ; 这允许每个节具有不同的页眉和/或页脚。例如,横向部分的标题可能比纵向部分的标题宽。

每个节对象都有一个.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 = "Title of my document" 
../_images/hdrftr-01.png

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

>>> header.is_linked_to_previous
False

添加“分区”标题内容

具有多个“区域”的标题通常是使用精心放置的制表位来完成的。

中心和右对齐“区域”所需的制表位是Word中Header and Footer样式的一部分如果您使用的是自定义模板而不是默认的 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

了解多节文档中的标题

“刚开始编辑”方法在简单情况下效果很好,但是要理解多节文档中的标题行为,一些简单的概念将很有帮助。这里简而言之:

  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 

新添加的标头定义包含一个空的段落。请注意,以这种方式离开标头有时会很有用,因为它可以有效地“关闭”该节的标题和之后的节,直到下一个具有已定义标头的节。

分配False.is_linked_to_previous已经具有标题定义的标题不会执行任何操作。

继承的内容自动定位

编辑标题的内容会考虑任何“继承”来编辑标题的内容因此,例如,如果第2部分标题是从第1部分继承的,并且您编辑了第2部分标题,则实际上是在更改第1部分标题的内容。除非您首先显式分配False.is_linked_to_previous属性,否则不会为第2节添加新的标头定义

猜你喜欢

转载自www.cnblogs.com/xconline/p/11919739.html