使用頁眉和頁腳
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"

還要注意,添加內容(甚至只是訪問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"]

該Header
樣式會自動應用到新的標題,因此Header
在這種情況下,不需要上面的第三行(應用樣式),但此處包含了第三行以說明一般情況。
刪除標題
可以通過分配True
其 .is_linked_to_previous
屬性來刪除不需要的標頭:
>>> header.is_linked_to_previous = True >>> header.is_linked_to_previous True
標頭的內容True
分配給時,將 不可撤消地刪除.is_linked_to_previous
。
了解多節文檔中的標題
“剛開始編輯”方法在簡單情況下效果很好,但是要理解多節文檔中的標題行為,一些簡單的概念將很有幫助。這里簡而言之:
- 每個部分可以有自己的標頭定義(但不必如此)。
- 缺少標題定義的節將繼承該節的標題。該
_Header.is_linked_to_previous
屬性僅反映是否存在標頭定義,False
何時存在定義,True
何時不存在。 - 缺少標題定義是默認狀態。新文檔沒有定義的標題,新插入的節也沒有。在這兩種情況下均會
.is_linked_to_previous
報告True
。 - 如果
_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節添加新的標頭定義。