写点什么

结合 pyqt5 开发办公文档一键转换软件, 以后再也不用开会员转文件了

作者:迷彩
  • 2022 年 7 月 20 日
  • 本文字数:3306 字

    阅读完需:约 11 分钟

前言

自动化办公能大量提高我们的工作效率,而且利用自动化办公能够有效避免枯燥无味的机械操作,把手腾出来做其他更有意义的事.现在加上 Python 能够提供大量开源的自动化办公的库,能够快速实现很多需要开通 vip 才能使用的功能.比如文档之间格式的转换.比如,我要制作邀请函.如果 office 掌握不好.一张一张制作也是一件很痛苦的事,利用 Python 就能够实现批量生成邀请函.除了自动化办公,python 还能够实现很多有趣的功能,感兴趣的可以自行深入了解,接下来本文手把手带你实现文档转换功能以及封装到 pyqt5,并打包成 exe 可执行文件


准备

因为我要把日常的操作封装到一起.比 word 文档转 PDF/PDF 转 word 文档以及文本处理需要安装以下库

pip install pdf2docxpip install docx2pdf #word转pdf
复制代码


pyqt5 还不了解的童鞋可以参考这篇文章:《值得学习的 Python GUI 库 - pyQt5 快速入门及精美界面设计体验

操作系统:windows 64 位

接下来进入实操。


实操

首先是导入相关的库

import sysimport osfrom docx2pdf import convertfrom pdf2docx import Converterfrom PyQt5.QtWidgets import *
复制代码

涉及到文件的读写操作所以,所以需要导入 os 库以及 sys 库。


使用 qt5 设计 GUI

class MainForm(QWidget):    def __init__(self, name = 'MainForm'):        super(MainForm,self).__init__()        self.setWindowTitle(name)        self.cwd = os.getcwd() # 获取当前程序文件位置        self.resize(600,400)   # 设置窗体大小
# 选择待转的文件 self.btn_chooseFile = QPushButton(self) self.btn_chooseFile.setObjectName("btn_chooseFile") self.btn_chooseFile.setText("选取需要转换文件")
# 保存的目录选择 self.btn_chooseDir = QPushButton(self) self.btn_chooseDir.setObjectName("btn_chooseDir") self.btn_chooseDir.setText("保存到文件")
#源 self.textEdit = QTextEdit(self) self.textEdit.setEnabled(True) self.textEdit.setAccessibleName("") self.textEdit.setPlaceholderText('请选择文件') self.textEdit.setFixedSize(580,30) self.textEdit.setObjectName("textEdit") # 保存 self.textEdit2 = QTextEdit(self) self.textEdit2.setEnabled(True) self.textEdit2.setAccessibleName("") self.textEdit2.setPlaceholderText('请选择保存目录') self.textEdit2.setFixedSize(580, 30) self.textEdit2.setObjectName("textEdit2")
# TXT生成SQL self.btn_saveFile = QPushButton(self) self.btn_saveFile.setObjectName("btn_saveFiletxt2sql") self.btn_saveFile.setText("TXT生成SQL")
# Word转PDF self.btn_saveFile2 = QPushButton(self) self.btn_saveFile2.setObjectName("btn_saveFilew2pdf") self.btn_saveFile2.setText("Word转PDF")
# PDF转Word self.btn_saveFile3 = QPushButton(self) self.btn_saveFile3.setObjectName("btn_saveFilepdf2w") self.btn_saveFile3.setText("PDF转Word")
self.eittxt = QLabel(self) self.eittxt.setText("说明:请根据文件类型选择对应的按钮转换") self.eittxt.setObjectName("eittxt") self.eittxt.setFixedSize(580, 30)
# 设置布局 layout = QVBoxLayout() layout.addWidget(self.btn_chooseFile) layout.addWidget(self.textEdit) layout.addWidget(self.btn_chooseDir) layout.addWidget(self.textEdit2) layout.addWidget(self.eittxt) layout.addWidget(self.btn_saveFile) layout.addWidget(self.btn_saveFile2) layout.addWidget(self.btn_saveFile3) self.setLayout(layout)
# 给按钮绑定点击事件 self.btn_chooseDir.clicked.connect(self.slot_btn_chooseDir) self.btn_chooseFile.clicked.connect(self.slot_btn_chooseFile) self.btn_saveFile.clicked.connect(self.slot_btn_saveFile) self.btn_saveFile2.clicked.connect(self.slot_wtopdfbtn_saveFile) self.btn_saveFile3.clicked.connect(self.slot_pdftowbtn_saveFile)
复制代码

接着在类里给实现按钮点击事件的函数

    def slot_btn_chooseDir(self):        fileName_choose, filetype = QFileDialog.getSaveFileName(self,                                                                "保存文件",                                                                self.cwd,  # 起始路径                                                                "All Files (*);;Text Files (*.txt)")
if fileName_choose == "": print("\n取消选择") return
print("\n你选择要保存的文件为:") print(fileName_choose) print("文件筛选器类型: ", filetype) self.textEdit2.setText(fileName_choose)
def slot_btn_chooseFile(self): fileName_choose, filetype = QFileDialog.getOpenFileName(self, "选取文件", self.cwd, # 起始路径 "All Files (*);;Text Files (*.txt)") # 设置文件扩展名过滤,用双分号间隔
if fileName_choose == "": print("\n取消选择") return
print("\n你选择的文件为:") print(fileName_choose) self.textEdit.setText(fileName_choose) print("文件筛选器类型: ",filetype)

#txt转sql def slot_btn_saveFile(self): with open(self.textEdit.toPlainText(), 'r',encoding="utf-8") as file: while True: # readline()默认换行 txt = file.readline() if txt: print(txt, end='') with open(self.textEdit2.toPlainText(), 'a+', encoding='utf-8') as wf: text = 'insert into table (code) value ("' + txt + '"); \n' wf.write(text) else: break
#word转pdf def slot_wtopdfbtn_saveFile(self): convert(self.textEdit.toPlainText(), self.textEdit2.toPlainText())
#pdf转word def slot_pdftowbtn_saveFile(self): # pdf文件名称 pdf_name = self.textEdit.toPlainText() # 要转换的docx文件名称 docx_name = self.textEdit2.toPlainText() # 加载pdf文档 cv = Converter(pdf_name) cv.convert(docx_name) cv.close()
复制代码


然后就是调用窗口

if __name__=="__main__":    app = QApplication(sys.argv)    mainForm = MainForm("文件转换")    mainForm.show()    sys.exit(app.exec_())
复制代码


这样就简单实现了各种文档文件之间的格式转换,本文中的 txt 转 sql 语句中的 sql 我是在代码里写定了,你也可以再页面增加输入框有自己输入,还有就是为了使用方便,还可以使用 pyinstaller 打包成 exe 可执行文件

pyinstaller的安装命令:

pip install pyinstaller

如果上述命令无法安装可使用清华或者豆瓣的镜像安装

pip install -i https://pypi.douban.com/simple/ pyinstaller #豆瓣源pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller #清华源
复制代码

打包的的过程可能比较漫长;慢慢等。看到 succesfully 说明打包成功。


从上图可以看出文件特别大,而且打开很慢,可以思考怎么把文件打包更小,启动更快?下次考~哈哈

发布于: 刚刚阅读数: 4
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020.06.18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论

发布
暂无评论
结合pyqt5开发办公文档一键转换软件,以后再也不用开会员转文件了_打包_迷彩_InfoQ写作社区