word助手
1、系统功能结构
![系统功能结构](https://i-blog.csdnimg.cn/blog_migrate/bc5ba1985f52aef9a7650322c90e2b26.png)
2、系统业务流程
![系统业务流程](https://i-blog.csdnimg.cn/blog_migrate/27c73def553351039848a26f1d86f5d4.png)
3、开发工具准备
- python内置模块:os、_thread、sys、codecs、re
- 第三方模块:PyQt5/PySide2、pyqt5-tools、PyPDF2、pywin32
4、文件夹组织结构
![文件夹组织结构](https://i-blog.csdnimg.cn/blog_migrate/77b8aca4cf07895107e825c322583177.png)
- wordtopdf -------- 项目文件夹
- image -------- 保存图片的文件夹
- tools -------- 工具类
- ui -------- 保存UI界面文件的文件夹
- venv -------- 虚拟环境
- listWindow.py -------- 提取总目录窗口文件
- mainWindow.py -------- 主窗体文件
- pageWindow.py -------- 提取页码窗体文件
- transformWindow.py -------- Word转PDF窗体文件
- wordtopdf.py -------- 项目主文件
5. 编写工具模块
① 编写遍历目录模块
- 在tool文件夹建立common.py文件
- 软件经常需要遍历目录下文件,所以考虑到代码重用,建立次函数
from win32com import client as wc
from docx2pdf import convert
import shutil
import os
def getfilenames(documentname,doc_path):
"""
documentname放有文件夹的名称
doc_path其中doc格式的文件你想移到那个位置
"""
filelist_out = []
for filename in os.listdir(documentname):
fi_d = os.path.join(documentname,filename)
file_ext = os.path.splitext(filename)[1]
if file_ext == '.docx' or '.doc':
if file_ext == '.docx':
filelist_out.append(fi_d)
if file_ext == '.doc':
this_fullname = os.path.join(documentname,filename)
w = wc.Dispatch('Word.Application')
doc = w.Documents.Open(this_fullname)
next_fullname = os.path.splitext(this_fullname)[0]+'.docx'
doc.SaveAs(next_fullname,16)
doc.Close()
shutil.move(this_fullname,r'E:\签收单\1\新建文件夹')
filelist_out.append(next_fullname)
if __name__ == '__main__':
getfilenames(r'E:\签收单\1',r'E:\签收单\1\新建文件夹')
② 编写将word文档转换成PDF的wordtopdf1模块
"""研究书上的例子三天头都大了,
就是不明白,最后在b站有个老师提到了问题的关键,
下面这串数字的意思是:你正版office的序列号,哈哈
encache.EnsureModule('{00020905-0000-0000-C000-0000000046}',0,8,4)
"""
- 使用模块:doc2pdf,pywin32
- 安装方法: pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple/ docx2pdf
pip install pywin32==223
- 其中安装pywin32时可能会出现一些小问题,如果直接安装不上,可以点击这个网址直接下载223版
- https://sourceforge.net/projects/pywin32/files/pywin32/
链接: pywin32下载链接.
import os
from docx2pdf import convert
import common
import win32api
def wordtopdf2(filelist,targetfile):
try:
for fullfilename in filelist:
filepath,filename = os.path.split(fullfilename)
sortfilename = os.path.splitext(filename)
pdfname = sortfilename[0]+'.pdf'
pdfpath = os.path.join(targetfile,pdfname)
convert(fullfilename, pdfpath)
except Exception as e:
print(e)
filelist = common.getfilenames(r'E:\签收单\1',r'E:\签收单\1\新建文件夹')
targetfile = r'E:\签收单\1'
wordtopdf2(filelist,targetfile)