![](https://img.51dongshi.com/20250108/wz/18396424052.jpg)
接上節(jié)python辦公自動化:自動進行word文檔處理和排版,本節(jié)將就python操作word的頁眉頁腳技巧做深入介紹。使用頁眉和頁腳python操作word的頁眉頁腳技巧做深入介紹Word支持頁眉和頁腳。頁眉是出現(xiàn)在每個頁面的上邊距區(qū)域中的文本,與文本主體分開,并且通常傳達上下文信息,例如文檔標題,作者,創(chuàng)建日期或頁碼。文檔中的頁眉在頁面之間是相同的,內(nèi)容上只有很小的差異,例如更改部分標題或頁碼。頁眉也稱為運行頭。一個頁面頁腳中的每個日日夜夜,只不過它出現(xiàn)在頁面底部的頁頭類似。它不應與腳注混淆,腳注在頁面之間不一致。為了簡潔起見,這里經(jīng)常使用術(shù)語標題來指代可以是頁眉或頁腳對象的內(nèi)容,信任讀者以理解它對兩種對象類型的適用性。訪問節(jié)的標題頁眉和頁腳與一個部分相關聯(lián); 這允許每個部分具有不同的頁眉和/或頁腳。例如,橫向部分可能具有比縱向部分更寬的標題。每個section對象都有一個.header屬性,提供對該節(jié)的對象的訪問:>>> document = Document()>>> section = document.sections[0]>>> header = section.header>>> header甲目的是總是存在于Section.header,即使當沒有報頭該節(jié)限定。實際標頭定義的存在表示為_Header.is_linked_to_previous:>>> header.is_linked_to_previousTrue值為True表示對象不包含標題定義,該節(jié)將顯示與上一節(jié)相同的標題。這種"繼承"行為是遞歸的,因此"鏈接"標題實際上從具有標題定義的第一個前一部分獲得其定義。此"鏈接"狀態(tài)在Word UI中顯示為 "與以前相同"。新文檔沒有標題(在它包含的單個部分),因此 .is_linked_to_previous就是True這種情況。請注意,這種情況可能有點違反直覺,因為沒有要鏈接的前一個節(jié)頭。在此"無前一個標題"的情況下,不顯示標題。添加標題(簡單情況)只需編輯 對象的內(nèi)容即可將標題添加到新文檔中。一個對象是一個"故事"容器及其內(nèi)容進行編輯,就像一個對象。請注意,與新文檔一樣,新標題已包含單個(空)段落:>>> paragraph = header.paragraphs[0]>>> paragraph.text = "Title of my document"添加內(nèi)容(甚至只是訪問header.paragraphs)的行為添加了標頭定義并另請注意,添加內(nèi)容(甚至只是訪問header.paragraphs)的行為添加了標頭定義并更改了以下狀態(tài).is_linked_to_previous:>>> header.is_linked_to_previousFalse添加"分區(qū)"標題內(nèi)容具有多個"區(qū)域"的標題通常使用精心放置的制表位來完成。中心和右對齊"區(qū)域"所需的制表位是HeaderWord中潛在樣式的一部分 ,但該樣式不存在于默認python-docx 模板中,需要添加:>>> from docx.enum.style import WD_STYLE_TYPE>>> from docx.enum.text import WD_TAB_ALIGNMENT>>> styles = document.styles>>> style = styles.add_style("Header", WD_STYLE_TYPE.PARAGRAPH)>>> style.base_style = styles["Normal"]>>> tab_stops = style.paragraph_format.tab_stops>>> tab_stops.add_tab_stop(Inches(3.25), WD_TAB_ALIGNMENT.CENTER)>>> tab_stops.add_tab_stop(Inches(6.5), WD_TAB_ALIGNMENT.RIGHT)如果您使用的是自定義模板而不是python-docx默認模板,那么在模板中定義該樣式可能是有意義的。一旦Header式存在時,突片用于分離左,中和右對齊頭內(nèi)容:>>> paragraph = header.paragraphs[0]>>> paragraph.text = "Left Text\tCenter Text\tRight Text">>> paragraph.style = document.styles["Header"]突片用于分離左,中和右對齊頭內(nèi)容:刪除標題可以通過分配True其 .is_linked_to_previous屬性來刪除不需要的標頭:>>> header.is_linked_to_previous = True>>> header.is_linked_to_previousTrueTrue分配給 標題時,標題的內(nèi)容將被不可逆轉(zhuǎn)地刪除.is_linked_to_previous。理解多節(jié)文檔中的標題"剛開始編輯"方法適用于簡單的情況,但為了理解多節(jié)文檔中的標題行為,一些簡單的概念將有所幫助。簡而言之:1. 每個部分都可以有自己的標頭定義(但不必)。2. 缺少標頭定義的部分會繼承之前部分的標頭。當存在定義而不存在_Header.is_linked_to_previous定義時,該屬性僅反映標頭定義的False存在True。3. 缺少標頭定義是默認狀態(tài)。新文檔沒有已定義的標題,也沒有新插入的部分。.is_linked_to_previous報告 True這兩種情況。4. 如果_Header對象的內(nèi)容具有標題定義,則它是自己的內(nèi)容。如果不是,它的內(nèi)容是第一現(xiàn)有節(jié)的不具有標題的定義。如果沒有節(jié)具有標題定義,則在第一節(jié)中添加新節(jié),并且所有其他節(jié)繼承該節(jié)。這種添加標頭定義是在第一次訪問標頭內(nèi)容時發(fā)生的,可能是通過引用 header.paragraphs。添加標題定義(一般情況)可以通過賦予False其.is_linked_to_previous屬性來為缺少一個節(jié)的節(jié)提供顯式標頭定義 :>>> header.is_linked_to_previousTrue>>> header.is_linked_to_previous = False>>> header.is_linked_to_previousFalse新添加的標頭定義包含一個空段落。請注意,以這種方式保留標題偶爾會有用,因為它有效地"關閉"該部分的標題以及之后的標題,直到具有已定義標題的下一部分。分配False給.is_linked_to_previous已具有標頭定義的標頭不會執(zhí)行任何操作。自動定位繼承的內(nèi)容編輯標題的內(nèi)容會編輯源標題的內(nèi)容,同時考慮任何"繼承"。因此,例如,如果第2節(jié)標題繼承自第1節(jié)并且您編輯第2節(jié)標題,則實際上更改了第1節(jié)標題的內(nèi)容。除非您首先明確指定False其.is_linked_to_previous屬性,否則不會為第2節(jié)添加新的標頭定義。