前情提要
单位要写交流报告,上交材料要公文格式,但是打印出来要打印在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文档格式
发布评论