python-docx 頁(yè)面設(shè)置詳解
初識(shí)word文檔-節(jié)-的概念
編輯一篇word文檔,往往首先從頁(yè)面設(shè)置開(kāi)始,從下圖可以看出,頁(yè)面設(shè)置常操作的有頁(yè)邊距、紙張方向、紙張大小4個(gè),而在word中是以節(jié)(section)來(lái)分大的塊,每一節(jié)的頁(yè)面設(shè)置可以不同。所以在python-docx中也是一樣,當(dāng)前節(jié)的各項(xiàng)屬性全部保存在當(dāng)前的section中,要想設(shè)置當(dāng)前節(jié)的頁(yè)面就從了解section的各個(gè)屬性應(yīng)用開(kāi)始吧。

如果用python-docx新建一個(gè)空白文檔,那么默認(rèn)是只有一個(gè)節(jié)
>>> import docx >>> doc = docx.Document() >>> len(doc.sections) 1
,如果要增加節(jié)可以用doc.add_section()來(lái)完成。
>>> import docx >>> doc = docx.Document() >>> len(doc.sections) 1 >>> doc.add_section() <docx.section.Section object at 0x000001F27F85E370> >>> len(doc.sections) 2
了解了節(jié)之后我們開(kāi)始來(lái)對(duì)節(jié)的頁(yè)面進(jìn)行設(shè)置。
設(shè)置頁(yè)邊距
在python-docx包中常用頁(yè)邊距屬性存在section的以下4個(gè)屬性中:
section.top_margin:上頁(yè)邊距
section.bottom_margin:下頁(yè)邊距
section.left_margin:左頁(yè)邊距
section.right_margin:右頁(yè)邊距
頁(yè)邊距的值以厘米(cm)為單位,讓我們來(lái)看看剛才第二節(jié)的默認(rèn)的頁(yè)邊距是多少
>>> 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]是第二節(jié)。
下面把頁(yè)邊距設(shè)置成我們公文常用的5678頁(yè)面距
>>> 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)
這里要先導(dǎo)入docx中定義單位的Cm,后面常用的單位還有Pt 也是這個(gè)塊導(dǎo)入。
另外 頁(yè)邊距屬性還有3個(gè)不常用的就是裝訂線,頁(yè)眉、頁(yè)腳邊距分別為:section.gutter,section.header_distance, section.footer_distance ,設(shè)置方法同上,不再贅述。需要說(shuō)明的是裝訂線還有一個(gè)位置屬性,暫時(shí)未發(fā)現(xiàn)如何設(shè)置,默認(rèn)為左,如果需求設(shè)置成右,可以建個(gè)模板docx文檔導(dǎo)入。
設(shè)置紙張方向和大小
Section中的三個(gè)屬性描述了頁(yè)面方向和尺寸。分別為:section.orientation, section.page_width, section.page_height
紙張大小設(shè)置單位我習(xí)慣用cm,設(shè)置同頁(yè)邊距。
這里要特別說(shuō)下orientation,即紙張方向,也是要設(shè)置的,不能說(shuō)你把紙張寬度設(shè)置寬了,高度設(shè)置低了紙張就變成橫向了,會(huì)影響打印等。
紙張方向的值是docx.enum.section.WD_ORIENTATION中枚舉類(lèi)型的2常量來(lái)設(shè)置的。分別為:
WD_ORIENTATION.LANDSCAPE:紙張方向?yàn)闄M向。
WD_ORIENTATION.PORTRAIT:紙張方向?yàn)榭v向。
先查看下:
>>> doc.sections[0].page_height.cm 27.94 >>> doc.sections[0].page_width.cm 21.59 >>> doc.sections[0].orientation 0
默認(rèn)的是信紙大小,橫向
設(shè)置成我們常用的A4紙大小下:
from docx.shared import Cm from docx.enum.section import WD_ORIENTATION doc.sections[0].page_height = Cm(29.7) # 設(shè)置A4紙的高度 doc.sections[0].page_width = Cm(21) # 設(shè)置A4紙的寬 doc.sections[0].orientation = WD_ORIENTATION.PORTRAIT # 設(shè)置紙張方向?yàn)闄M向,可以不設(shè)置 默認(rèn)為橫向 doc.sections[1].page_height = Cm(21) # 設(shè)置A4紙的高度 doc.sections[1].page_width = Cm(29.7) # 設(shè)置A4紙的寬 doc.sections[1].orientation = WD_ORIENTATION.LANDSCAPE # 設(shè)置紙張方向?yàn)榭v向
設(shè)置分欄
有些時(shí)候我們還要在某些節(jié)中分欄,給節(jié)設(shè)置分欄的語(yǔ)句比較固定,就是更改section的一個(gè)私有屬性。先導(dǎo)入docx.oxml.ns.qn,然后一句話搞定
from docx.oxml.ns import qn
doc.sections[1]._sectPr.xpath('./w:cols')[0].set(qn('w:num'), '2') #把第二節(jié)設(shè)置為2欄
想設(shè)置成幾欄 把‘2'就改成幾。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注本站的更多內(nèi)容!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信