使用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節添加新的標頭定義


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM