初識word文檔-節-的概念
編輯一篇word文檔,往往首先從頁面設置開始,從下圖可以看出,頁面設置常操作的有頁邊距、紙張方向、紙張大小4個,而在word中是以節(section)來分大的塊,每一節的頁面設置可以不同。所以在python-docx中也是一樣,當前節的各項屬性全部保存在當前的section中,要想設置當前節的頁面就從了解section的各個屬性應用開始吧。
如果用python-docx新建一個空白文檔,那么默認是只有一個節
>>> import docx >>> doc = docx.Document() >>> len(doc.sections) 1
,如果要增加節可以用doc.add_section()來完成。
>>> import docx >>> doc = docx.Document() >>> len(doc.sections) 1 >>> doc.add_section() <docx.section.Section object at 0x000001F27F85E370> >>> len(doc.sections) 2
了解了節之后我們開始來對節的頁面進行設置。
設置頁邊距
在python-docx包中常用頁邊距屬性存在section的以下4個屬性中:
section.top_margin:上頁邊距
section.bottom_margin:下頁邊距
section.left_margin:左頁邊距
section.right_margin:右頁邊距
頁邊距的值以厘米(cm)為單位,讓我們來看看剛才第二節的默認的頁邊距是多少
>>> print('上',doc.sections[1].top_margin.cm,'下',doc.sections[1].bottom_margin.cm,'左',doc.sections[1].left_margin.cm,'右',doc.sections[1].right_margin.cm) 上 2.54 下 2.54 左 3.175 右 3.175
注,這里的sections[1]是第二節。
下面把頁邊距設置成我們公文常用的5678頁面距
>>> from docx.shared import Cm >>> doc.sections[1].top_margin = Cm(3.7) >>> doc.sections[1].bottom_margin = Cm(3.5) >>> doc.sections[1].left_margin = Cm(2.8) >>> doc.sections[1].right_margin = Cm(2.6)
這里要先導入docx中定義單位的Cm,后面常用的單位還有Pt 也是這個塊導入。
另外 頁邊距屬性還有3個不常用的就是裝訂線,頁眉、頁腳邊距分別為:section.gutter,
section.header_distance, section.footer_distance ,設置方法同上,不再贅述。需要說明的是裝訂線還有一個位置屬性,暫時未發現如何設置,默認為左,如果需求設置成右,可以建個模板docx文檔導入。
設置紙張方向和大小
Section 中的三個屬性描述了頁面方向和尺寸。分別為:section.orientation, section.page_width, section.page_height
紙張大小設置單位我習慣用cm,設置同頁邊距。
這里要特別說下orientation,即紙張方向,也是要設置的,不能說你把紙張寬度設置寬了,高度設置低了紙張就變成橫向了,會影響打印等。
紙張方向的值是docx.enum.section.WD_ORIENTATION中枚舉類型的2常量來設置的。分別為:
WD_ORIENTATION.LANDSCAPE:紙張方向為橫向。
WD_ORIENTATION.PORTRAIT:紙張方向為縱向。
先查看下:
>>> doc.sections[0].page_height.cm 27.94 >>> doc.sections[0].page_width.cm 21.59 >>> doc.sections[0].orientation 0
默認的是信紙大小,橫向
設置成我們常用的A4紙大小下:
from docx.shared import Cm from docx.enum.section import WD_ORIENTATION doc.sections[0].page_height = Cm(29.7) # 設置A4紙的高度 doc.sections[0].page_width = Cm(21) # 設置A4紙的寬 doc.sections[0].orientation = WD_ORIENTATION.PORTRAIT # 設置紙張方向為橫向,可以不設置 默認為橫向 doc.sections[1].page_height = Cm(21) # 設置A4紙的高度 doc.sections[1].page_width = Cm(29.7) # 設置A4紙的寬 doc.sections[1].orientation = WD_ORIENTATION.LANDSCAPE # 設置紙張方向為縱向
設置分欄
有些時候我們還要在某些節中分欄,給節設置分欄的語句比較固定,就是更改section的一個私有屬性。先導入docx.oxml.ns.qn,然后一句話搞定
from docx.oxml.ns import qn doc.sections[1]._sectPr.xpath('./w:cols')[0].set(qn('w:num'), '2') #把第二節設置為2欄
想設置成幾欄 把‘2’就改成幾。
設置頁眉和頁腳
from docx import Document document = Document() # 新建文檔 或 模板 header = document.sections[0].header # 獲取第一個節的頁眉 print('頁眉中默認段落數:', len(header.paragraphs)) paragraph = header.paragraphs[0] # 獲取頁眉的第一個段落 paragraph.add_run('這是第一節的頁眉2') # 添加頁面內容 footer = document.sections[0].footer # 獲取第一個節的頁腳 paragraph = footer.paragraphs[0] # 獲取頁腳的第一個段落 paragraph.add_run('這是第一節的頁腳2') # 添加頁腳內容 document.save('test.docx') # 保存文檔