python-docx處理Word必備工具

站著活發表於2021-10-16
 

我的理解

為什麼會用到python-docx,因為近段時間下載了大量網文,但格式都是html的,我個人習慣使用word處理文字,於是就想法設法把html文件轉換為word,首先要考慮的問題就是從html中提取的文字怎麼存word裡呢,之前用了pandoc直接轉換,帶轉換後的效果太不理想,沒什麼格式,不符合我這種對word格式有嚴格要求強迫症人的需要,於是就到處搜尋其他方法,終於功夫不負有心人,通過幾天研究python-docx,感覺很適合我,就一邊分析html文件,一邊思考怎麼用python-docx存想要的格式word,因為我的word排版,一般習慣 頁面要設定成5678頁邊距的,大小A4的,正文主標題 方正小標宋,其他標題要麼黑體,要麼加粗,正文要首行縮排2字元 仿宋_GB2312,頁尾要加頁碼顯示,大概這些樣式。

python-docx 建立一篇文件也差不多是這麼個思路,一篇文件也就是Document()物件 首先要分成不同的節,也就是由sections物件控制,然後每節中又分成不同的段落paragraphs物件,每段又由不同的塊run物件組成,針對不同的節(section)可以設定頁面的一些屬性,針對不同的段落(paragraph),可以設定間距和縮排、換行和分頁等,針對不同塊(run)可以設定字型的字型、顏色、大小等。可以先設定好整篇文章的大致段落、字型等格式,然後針對不同段落和塊可以單獨再進行設定。

我主要講講自己用到的幾個內容是怎麼設定的。

安裝庫:

pip install python-docx  

用到的庫

from docx import Document(文件讀寫)
from docx.shared import Pt,Cm,Inches (字型大小,不一定全用到)
from docx.oxml.ns import qn(設定字型格式,分欄等用到)
from docx.shared import RGBColor (設定字型顏色)
from docx.enum.text import WD_ALIGN_PARAGRAPH (設定對其方式)
from docx.enum.section import WD_ORIENTATION (紙張方向用到)

  

設定大致格式

這樣設定完了之後有一個好處就是,後往裡面寫入文件的時候回自動按這個格式,如果有需要改動的再單獨寫入時改。

    docment = docx.Document(docx_tamplate) # 讀取模板文件,這裡可以不用模板文件,因為python-docx沒法設定頁碼,所以我先建了一個有頁碼的空白文件作為模板文件
    # 設定正文預設格式
    # 字型大小三號字(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)
    # 首行縮排2字元
    docment.styles['Normal'].paragraph_format.first_line_indent = 406400
    # 關閉孤行控制
    docment.styles['Normal'].paragraph_format.widow_control = False
    # 設定頁面大小
    docment.sections[0].page_height = Cm(29.7)  # 設定A4紙的高度
    docment.sections[0].page_width = Cm(21)  # 設定A4紙的寬
    # 設定頁邊距
    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)

  

單獨設定段格式

doc=Document() #建立一個空白文件
p1=doc.add_paragraph()  #初始化建立一個自然段
p1.alignment=WD_ALIGN_PARAGRAPH.CENTER  #對齊方式為居中,沒有這句話預設左對齊。另外右對齊:RIGHT,兩端對齊:JUSTIFY,分散對齊:DISTRIBUTE

p1.paragraph_format.line_spacing=1.5  #設定該段落,行間距為1.5倍,也可以像上面設預設值那樣用Pt單位來設定
p1.paragraph_format.first_line_indent=Inches(0.5)  #段落縮排0.5英寸,我還是習慣設定2字元 值為:406400
p1.paragraph_format.left_line_indent=Inches(0.5)  #設定左縮排0.5英寸。一般用不到
p1.paragraph_format.right_line_indent=Inches(0.5)  #設定右縮排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)  #設定段後距離為5磅
p1.space_before=Pt(5)  #設定段前距離為5磅 

run1=p1.add_run('你好')   #寫入段落的中的文字“你好”
run1.font.size=Pt(12)  #單獨設定字型大小為24
run1.font.bold=True  #樣式設定加粗
run1.italic=True  #字形設定斜體
run1.font.underline = True  # 下劃線
run1.font.color.rgb = RGBColor(255, 0, 0)  # 顏色

  

插入圖片

#新增圖片,設定圖片大小
doc.add_picture(r"圖片路徑", width=Cm(10))

  

插入表格

tab = doc.add_table(rows=5, cols=8, style='Table Grid') # 建立一個5行8列的表格,樣式為Table Grid
tab.cell(0, 0).text = '表角'  # 0行0列的內容為表角
cell=tab.cell(0, 1).merge(tab.cell(0, 3)) # 合併0行1列到0行3列
p = cell.paragraphs[0] 
run = p.add_run(‘合併’) #在單元格內容建立一個段落,並寫入‘合併’文字
run.font.size = Pt(10.5)  # 字型大小設定,和word裡面的字號相對應5號字
run.bold = True
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 設定為加粗 居中顯示

  

 

相關文章