詳解python-docx處理Word必備工具
我的理解
為什么會(huì)用到python-docx,因?yàn)榻螘r(shí)間下載了大量網(wǎng)文,但格式都是html的,我個(gè)人習(xí)慣使用word處理文字,于是就想法設(shè)法把html文檔轉(zhuǎn)換為word,首先要考慮的問題就是從html中提取的文字怎么存word里呢,之前用了pandoc直接轉(zhuǎn)換,帶轉(zhuǎn)換后的效果太不理想,沒什么格式,不符合我這種對(duì)word格式有嚴(yán)格要求強(qiáng)迫癥人的需要,于是就到處搜尋其他方法,終于功夫不負(fù)有心人,通過幾天研究python-docx,感覺很適合我,就一邊分析html文檔,一邊思考怎么用python-docx存想要的格式word,因?yàn)槲业膚ord排版,一般習(xí)慣 頁面要設(shè)置成5678頁邊距的,大小A4的,正文主標(biāo)題 方正小標(biāo)宋,其他標(biāo)題要么黑體,要么加粗,正文要首行縮進(jìn)2字符 仿宋_GB2312,頁腳要加頁碼顯示,大概這些樣式。
python-docx 創(chuàng)建一篇文檔也差不多是這么個(gè)思路,一篇文檔也就是Document()對(duì)象 首先要分成不同的節(jié),也就是由sections對(duì)象控制,然后每節(jié)中又分成不同的段落paragraphs對(duì)象,每段又由不同的塊run對(duì)象組成,針對(duì)不同的節(jié)(section)可以設(shè)置頁面的一些屬性,針對(duì)不同的段落(paragraph),可以設(shè)置間距和縮進(jìn)、換行和分頁等,針對(duì)不同塊(run)可以設(shè)置字體的字型、顏色、大小等??梢韵仍O(shè)置好整篇文章的大致段落、字體等格式,然后針對(duì)不同段落和塊可以單獨(dú)再進(jìn)行設(shè)置。
我主要講講自己用到的幾個(gè)內(nèi)容是怎么設(shè)置的。
安裝庫:
pip install python-docx
用到的庫
from docx import Document(文檔讀寫) from docx.shared import Pt,Cm,Inches (字體大小,不一定全用到) from docx.oxml.ns import qn(設(shè)置字體格式,分欄等用到) from docx.shared import RGBColor (設(shè)置字體顏色) from docx.enum.text import WD_ALIGN_PARAGRAPH (設(shè)置對(duì)其方式) from docx.enum.section import WD_ORIENTATION (紙張方向用到)
設(shè)置大致格式
這樣設(shè)置完了之后有一個(gè)好處就是,后往里面寫入文檔的時(shí)候回自動(dòng)按這個(gè)格式,如果有需要改動(dòng)的再單獨(dú)寫入時(shí)改。
docment = docx.Document(docx_tamplate) # 讀取模板文檔,這里可以不用模板文檔,因?yàn)閜ython-docx沒法設(shè)置頁碼,所以我先建了一個(gè)有頁碼的空白文檔作為模板文檔 # 設(shè)置正文默認(rèn)格式 # 字體大小三號(hào)字(16) docment.styles['Normal'].font.size = Pt(16) # 字體仿宋_GB2312 docment.styles['Normal'].font.name = u'仿宋_GB2312' docment.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋_GB2312') # 行間距 28磅 段前、段后不留空 docment.styles['Normal'].paragraph_format.line_spacing = Pt(29) docment.styles['Normal'].paragraph_format.space_before = Pt(0) docment.styles['Normal'].paragraph_format.space_after = Pt(0) # 首行縮進(jìn)2字符 docment.styles['Normal'].paragraph_format.first_line_indent = 406400 # 關(guān)閉孤行控制 docment.styles['Normal'].paragraph_format.widow_control = False # 設(shè)置頁面大小 docment.sections[0].page_height = Cm(29.7) # 設(shè)置A4紙的高度 docment.sections[0].page_width = Cm(21) # 設(shè)置A4紙的寬 # 設(shè)置頁邊距 docment.sections[0].top_margin = Cm(3.7) docment.sections[0].bottom_margin = Cm(3.4) docment.sections[0].left_margin = Cm(2.8) docment.sections[0].right_margin = Cm(2.6)
單獨(dú)設(shè)置段格式
doc=Document() #創(chuàng)建一個(gè)空白文檔 p1=doc.add_paragraph() #初始化建立一個(gè)自然段 p1.alignment=WD_ALIGN_PARAGRAPH.CENTER #對(duì)齊方式為居中,沒有這句話默認(rèn)左對(duì)齊。另外右對(duì)齊:RIGHT,兩端對(duì)齊:JUSTIFY,分散對(duì)齊:DISTRIBUTE p1.paragraph_format.line_spacing=1.5 #設(shè)置該段落,行間距為1.5倍,也可以像上面設(shè)默認(rèn)值那樣用Pt單位來設(shè)置 p1.paragraph_format.first_line_indent=Inches(0.5) #段落縮進(jìn)0.5英寸,我還是習(xí)慣設(shè)置2字符 值為:406400 p1.paragraph_format.left_line_indent=Inches(0.5) #設(shè)置左縮進(jìn)0.5英寸。一般用不到 p1.paragraph_format.right_line_indent=Inches(0.5) #設(shè)置右縮進(jìn)0.5英寸,一般用不到 p1.paragraph_format.keep_together = False # 段前分頁 p1.paragraph_format.keep_with_next = False # 與下段同頁 p1.paragraph_format.page_break_before = True # 段中不分頁 p1.paragraph_format.widow_control = False # 孤行控制 p1.space_after=Pt(5) #設(shè)置段后距離為5磅 p1.space_before=Pt(5) #設(shè)置段前距離為5磅 run1=p1.add_run('你好') #寫入段落的中的文本“你好” run1.font.size=Pt(12) #單獨(dú)設(shè)置字體大小為24 run1.font.bold=True #樣式設(shè)置加粗 run1.italic=True #字形設(shè)置斜體 run1.font.underline = True # 下劃線 run1.font.color.rgb = RGBColor(255, 0, 0) # 顏色
插入圖片
#添加圖片,設(shè)置圖片大小 doc.add_picture(r"圖片路徑", width=Cm(10))
插入表格
tab = doc.add_table(rows=5, cols=8, style='Table Grid') # 創(chuàng)建一個(gè)5行8列的表格,樣式為Table Grid tab.cell(0, 0).text = '表角' # 0行0列的內(nèi)容為表角 cell=tab.cell(0, 1).merge(tab.cell(0, 3)) # 合并0行1列到0行3列 p = cell.paragraphs[0] run = p.add_run(‘合并') #在單元格內(nèi)容創(chuàng)建一個(gè)段落,并寫入‘合并'文本 run.font.size = Pt(10.5) # 字體大小設(shè)置,和word里面的字號(hào)相對(duì)應(yīng)5號(hào)字 run.bold = True p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 設(shè)置為加粗 居中顯示
到此這篇關(guān)于python-docx處理Word必備工具的文章就介紹到這了,更多相關(guān)python-docx處理Word內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytest自動(dòng)化測(cè)試數(shù)據(jù)驅(qū)動(dòng)yaml/excel/csv/json
這篇文章主要為大家介紹了pytest自動(dòng)化測(cè)試數(shù)據(jù)驅(qū)動(dòng)yaml/excel/csv/json的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06淺談pytorch池化maxpool2D注意事項(xiàng)
今天小編就為大家分享一篇淺談pytorch池化maxpool2D注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02python人工智能tensorflow函數(shù)np.random模塊使用
這篇文章主要為大家介紹了python人工智能tensorflow函數(shù)np.random模塊使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python實(shí)現(xiàn)獲取當(dāng)前日期的所屬信息
在Python中,處理日期和時(shí)間是一個(gè)常見的任務(wù),它涉及到許多方面,例如獲取日期的年、月、日、星期幾等等,本文將詳細(xì)介紹如何使用Python來獲取當(dāng)前日期的各種相關(guān)信息,需要的可以了解下2024-01-01使用python實(shí)現(xiàn)unix2dos和dos2unix命令的例子
今天小編就為大家分享一篇使用python實(shí)現(xiàn)unix2dos和dos2unix命令的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08Python中常見的反爬機(jī)制及其破解方法總結(jié)
今天給大家?guī)淼奈恼率顷P(guān)于Python的相關(guān)知識(shí),文章圍繞著Python中常見的反爬機(jī)制及其破解方法展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06python3 requests庫實(shí)現(xiàn)多圖片爬取教程
今天小編就為大家分享一篇python3 requests庫實(shí)現(xiàn)多圖片爬取教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12