使用python-docx處理word.docx文件(3)


使用文本

為了有效地處理文本,重要的是要先對段落等塊級元素和運行等內聯級對象有所了解。

塊級與內聯文本對象

該段落是Word中的主要塊級對象。

塊級項在其左右邊緣之間流動其包含的文本,每當文本超出其右邊界時,就會增加一行。對於段落,邊界通常是頁邊距,但是如果頁面按列布局,邊界也可以是列邊界,如果段落出現在表格單元格內,則邊界也可以是單元格邊界。

表也​​是塊級對象。

內聯對象是出現在塊級項目內部的內容的一部分。一個例子是一個以粗體顯示的單詞或一個全大寫的句子。最常見的內聯對象是run塊容器中的所有內容都在內聯對象內部。通常,一個段落包含一個或多個運行,每個運行包含該段落的文本的一部分。

塊級項目的屬性指定其在頁面上的位置,例如段落前后的縮進和空格。內聯項的屬性通常指定顯示內容的字體,如字體,字體大小,粗體和斜體。

段落屬性

段落具有多種屬性,可以指定其在容器(通常是頁面)中的位置以及將內容划分為不同行的方式。

通常,最好定義一個段落樣式,將這些屬性收集到一個有意義的組中,然后將適當的樣式應用於每個段落,而不是將這些屬性直接直接應用於每個段落。這類似於級聯樣式表(CSS)與HTML一起工作的方式。此處描述的所有段落屬性都可以使用樣式設置,也可以直接應用於段落。

ParagraphFormat使用段落paragraph_format屬性可以使用的對象 訪問段落的格式設置屬性 

水平對齊(對齊)

也稱為對齊,可以使用枚舉WD_PARAGRAPH_ALIGNMENT的值將段落的水平對齊方式設置為左對齊,居中對齊,右對齊或完全對齊(左右對齊) 

>>> from docx.enum.text import WD_ALIGN_PARAGRAPH >>> document = Document() >>> paragraph = document.add_paragraph() >>> paragraph_format = paragraph.paragraph_format >>> paragraph_format.alignment None # indicating alignment is inherited from the style hierarchy >>> paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER >>> paragraph_format.alignment CENTER (1) 

縮進

縮進是段落和其容器邊緣之間的水平空間,通常是頁邊距。段落可以在左側和右側分別縮進。第一行的縮進也可以與該段落的其余部分不同。縮進的第一行比段落的其余部分縮進縮進較少的第一行具有懸掛縮進

壓痕被指定使用Length的值,諸如InchesPt,或 Cm負值有效,並且使段落與邊距重疊指定的數量。None表示縮進值是從樣式層次結構繼承的。分配None給縮進屬性將刪除任何直接應用的縮進設置,並從樣式層次結構恢復繼承:

>>> from docx.shared import Inches >>> paragraph = document.add_paragraph() >>> paragraph_format = paragraph.paragraph_format >>> paragraph_format.left_indent None # indicating indentation is inherited from the style hierarchy >>> paragraph_format.left_indent = Inches(0.5) >>> paragraph_format.left_indent 457200 >>> paragraph_format.left_indent.inches 0.5 

右側縮進以類似的方式工作:

>>> from docx.shared import Pt >>> paragraph_format.right_indent None >>> paragraph_format.right_indent = Pt(24) >>> paragraph_format.right_indent 304800 >>> paragraph_format.right_indent.pt 24.0 

第一行縮進使用first_line_indent屬性指定, 並且相對於左縮進進行解釋。負值表示懸掛縮進:

>>> paragraph_format.first_line_indent None >>> paragraph_format.first_line_indent = Inches(-0.25) >>> paragraph_format.first_line_indent -228600 >>> paragraph_format.first_line_indent.inches -0.25 

制表位

制表位決定了段落文字中制表符的呈現方式。特別是,它指定了制表符后面的文本的開始位置,與該位置對齊的方式,以及一個可選的前導字符,它將填充制表符跨越的水平空間。

段落或樣式的制表位包含在TabStops使用以下tab_stops屬性 訪問對象中ParagraphFormat

>>> tab_stops = paragraph_format.tab_stops >>> tab_stops <docx.text.tabstops.TabStops object at 0x106b802d8> 

使用以下add_tab_stop()方法添加新的制表位

>>> tab_stop = tab_stops.add_tab_stop(Inches(1.5)) >>> tab_stop.position 1371600 >>> tab_stop.position.inches 1.5 

對齊方式默認為左對齊,但可以通過提供WD_TAB_ALIGNMENT枚舉的成員來指定 前導字符默認為空格,但可以通過提供WD_TAB_LEADER 枚舉的成員來指定

>>> from docx.enum.text import WD_TAB_ALIGNMENT, WD_TAB_LEADER >>> tab_stop = tab_stops.add_tab_stop(Inches(1.5), WD_TAB_ALIGNMENT.RIGHT, WD_TAB_LEADER.DOTS) >>> print(tab_stop.alignment) RIGHT (2) >>> print(tab_stop.leader) DOTS (1) 

使用以下命令上的序列語義可以訪問現有的制表位TabStops

>>> tab_stops[0] <docx.text.tabstops.TabStop object at 0x1105427e8> 

TabStopsTabStopAPI文檔中提供了更多詳細信息

段落間距

space_before和 space_after特性分別控制隨后的段落之間的間隔,前后段落控制間距。間段間距折疊頁面布局中,這意味着兩個段落之間的間距是最大的的 space_after為第一段和space_before第二段的。段落間距通常指定為一個Length值 Pt

>>> paragraph_format.space_before, paragraph_format.space_after (None, None) # inherited by default >>> paragraph_format.space_before = Pt(18) >>> paragraph_format.space_before.pt 18.0 >>> paragraph_format.space_after = Pt(12) >>> paragraph_format.space_after.pt 12.0 

行間距

行距是一段段落中后續基線之間的距離。行距可以指定為絕對距離或相對於行高(基本上是所用字體的磅值)。典型的絕對度量值為18分。典型的相對度量是雙倍間距(2.0行高)。默認行距是單行距(1.0行高)。

行間距由line_spacing和 line_spacing_rule屬性的相互作用控制 。 line_spacing是一個Length值,(小)值float或無。Length值表示的絕對距離。float表示許多線高。None表示行間距是繼承的。line_spacing_ruleWD_LINE_SPACING枚舉的成員,None

>>> from docx.shared import Length >>> paragraph_format.line_spacing None >>> paragraph_format.line_spacing_rule None >>> paragraph_format.line_spacing = Pt(18) >>> isinstance(paragraph_format.line_spacing, Length) True >>> paragraph_format.line_spacing.pt 18.0 >>> paragraph_format.line_spacing_rule EXACTLY (4) >>> paragraph_format.line_spacing = 1.75 >>> paragraph_format.line_spacing 1.75 >>> paragraph_format.line_spacing_rule MULTIPLE (5) 

分頁性能

四個段落屬性,keep_together, keep_with_next, page_break_before,以及 widow_control如何接近頁邊界款的行為的控制方面。

keep_together 導致整個段落出現在同一頁面上,如果該段落在兩個頁面之間被打斷,則會在該段落之前發出分頁符。

keep_with_next與下一個段落在同一頁面上保留一個段落。例如,這可用於使節標題與節的第一段在同一頁面上。

page_break_before導致將段落放置在新頁面的頂部。可以在章節標題上使用它,以確保章節在新頁面上開始。

widow_control 中斷頁面以避免將段落的第一行或最后一行與段落的其余部分放在單獨的頁面上。

這些屬性的所有四個都是三態,這意味着他們可以采取的價值 TrueFalseNoneNone指示屬性值是從樣式層次結構繼承的。True表示“打開”,False表示“關閉”:

>>> paragraph_format.keep_together None # all four inherit by default >>> paragraph_format.keep_with_next = True >>> paragraph_format.keep_with_next True >>> paragraph_format.page_break_before = False >>> paragraph_format.page_break_before False 

應用字符格式

字符格式在運行級別應用。示例包括字體字體和大小,粗體,斜體和下划線。

一個Run對象有一個只讀font屬性提供訪問Font對象。運行的Font對象提供用於獲取和設置該運行的字符格式的屬性。

這里提供了幾個示例。有關可用屬性的完整集合,請參閱FontAPI文檔。

可以通過以下方式訪問運行的字體:

>>> from docx import Document >>> document = Document() >>> run = document.add_paragraph().add_run() >>> font = run.font 

字體和大小設置如下:

>>> from docx.shared import Pt >>> font.name = 'Calibri' >>> font.size = Pt(12) 

許多字體屬性是三態,這意味着他們可以采取的價值觀 TrueFalseNoneTrue表示該屬性為“開”,表示該屬性為False“關”。從概念上講,該None值表示“繼承”。樣式繼承層次結構中存在一個運行,默認情況下,運行從該層次結構繼承其字符格式。使用該Font對象直接應用的任何字符格式都會覆蓋繼承的值。

粗體和斜體是三態屬性,全大寫字母,刪除線,上標和許多其他屬性也是如此。請參閱FontAPI文檔以獲取完整列表:

>>> font.bold, font.italic (None, None) >>> font.italic = True >>> font.italic True >>> font.italic = False >>> font.italic False >>> font.italic = None >>> font.italic None 

下划線有點特殊情況。它是三態屬性和枚舉值屬性的混合。True表示單個下划線,是迄今為止最常見的下划線。False表示沒有下划線,但是None如果不需要下划線,通常是正確的選擇。WD_UNDERLINE 枚舉的成員指定其他形式的下划線,例如雙精度或虛線。

>>> font.underline None >>> font.underline = True >>> # or perhaps >>> font.underline = WD_UNDERLINE.DOT_DASH 

字體顏色

每個Font對象都有一個ColorFormat對象,對象可通過其只讀color屬性訪問其顏色

將特定的RGB顏色應用於字體:

>>> from docx.shared import RGBColor >>> font.color.rgb = RGBColor(0x42, 0x24, 0xE9) 

還可以通過分配MSO_THEME_COLOR_INDEX枚舉的成員來將字體設置為主題顏色 

>>> from docx.enum.dml import MSO_THEME_COLOR >>> font.color.theme_color = MSO_THEME_COLOR.ACCENT_1 

字體的顏色可以通過分配被恢復到其默認(繼承)值 None,以任一rgb或 theme_color屬性ColorFormat

>>> font.color.rgb = None 

確定字體的顏色首先要確定其顏色類型:

>>> font.color.type RGB (1) 

type屬性的值可以是MSO_COLOR_TYPE枚舉的成員,也可以是“ 無”。MSO_COLOR_TYPE.RGB表示它是RGB顏色。MSO_COLOR_TYPE.THEME指示主題顏色。 MSO_COLOR_TYPE.AUTO指示其值由應用程序自動確定,通常設置為黑色。(此值相對很少。)None 指示未應用顏色,並且顏色是從樣式層次結構繼承的;這是最常見的情況。

當顏色類型為MSO_COLOR_TYPE.RGB時,該rgb 屬性將是一個RGBColor指示RGB顏色值:

>>> font.color.rgb RGBColor(0x42, 0x24, 0xe9) 

當顏色類型為MSO_COLOR_TYPE.THEME時,該 theme_color屬性將成為MSO_THEME_COLOR_INDEX的成員, 指示主題顏色:

>>> font.color.theme_color ACCENT_1 (5)


免責聲明!

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



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