前情提要

单位要写交流报告,上交材料要公文格式,但是打印出来要打印在A5纸张上,为了快速将公文格式转为可打印在A5纸张上的格式,使用python-docx库实现。

项目目标

通过项目,可批量实现以下功能:

  • 修改纸张大小
  • 修改页边距
  • 修改文字大小
  • 修改段落行距
  • 删除不需要的问题

所需库

  • lxml(处理文件的必备库)
  • python-docx(docx文件处理)
  • win32com(将doc自动另存为docx)
  • re(判断文件类型)
  • os(批量读取处理文件)

核心功能(docx库的文件处理)

#导入所需库
#导入Document用以打开docx文件
from docx import Document as dc
#导入qn进行文字的样式处理
from docx.oxml.ns import qn
#导入Pt、Cm、Inches等计量单位对应磅、厘米、英寸
from docx.shared import Pt,Cm,Inches
#定义删除文字段落函数
def delete_pg(pg):
    p = pg._element
    p.getparent().remove(p)
    pg._p = pg._element = None
#定义文档处理函数
def getdoc(k):
    doc = dc(k)
    #文字处理获取段落,形成列表
    pg = doc.paragraphs
    #由于段落是列表,遍历,并对每一段落进行处理实现全文修改
    for i in range(0,len(pg)):
        #修改段落行间距
        pg_f = pg[i].paragraph_format
        pg_f.line_spacing = Pt(24)
        #将段落分成内容块,形成内容块列表
        contents = pg[i].runs
        #遍历内容块列表进行修改实现对全段落修改
        for con in contents:
        	#修改字号,12代表的是小四     
            con.font.size=Pt(12)
    #删除不需要的段落
    delete_pg(pg[0])
    #页面处理,页面需要按节处理,获取第一节
    section = doc.sections[0]
    #修改页面高、宽,单位厘米
    section.page_width = Cm(14.8)
    section.page_height = Cm(21)
    #修改页面上下左右边距,单位厘米
    section.top_margin = Cm(1.51)
    section.bottom_margin = Cm(1.1)
    section.left_margin = Cm(1.5)
    section.right_margin = Cm(1.0)
    #另存为新的文件
    doc.save("新"+k)

批量处理(OS使用)

#导入库
import os
import re
#获取当前路径(增强移植性)
path = os.getcwd()
#遍历当前路径下的文件,正则匹配docx文件并使用函数处理
for k in os.listdir(path):
    if re.match('.+\.docx',k):
        getdoc(k)

附加功能(doc转docx)

#导入客户端调用功能
from win32com import client as wc
#打开WPS客户端
word = wc.Dispatch("Kwps.Application")
#定义转换函数,逻辑为打开之后另存为
def zhuanhuan(file):
    doc = word.Documents.Open(file)
    doc.SaveAs(path+"\\"+j+".docx",12)
    doc.Close
#批量处理
for j in os.listdir(path):
	#匹配doc文件
    if re.match('.+\.doc$',j):
    	#处理,此处使用绝对路径避免错误
        zhuanhuan(path+"\\"+j)

在整个过程中,出现过很多错误和问题,最后也都成功解决了,但由于过程没有截图,现在也不好描述,如果参考中有任何问题可以留言评论,看到会解答。

更多推荐

python-docx库实战修改word文档格式