目录
PyQt是Qt框架的Python语言实现,是最强大的GUI库之一。PyQt提供了一个设计良好的窗口控件集合,具有更方便的操作性。学过VB的同学会知道,相比与VB的使用,在界面设计上元素更丰富。
本文就是基于PyQt5完成的pdf转word功能,先看界面:
一、界面PdfZ.ui可参考之前的文章如何实现,程序代码如下:
from PyQt5 import QtCore, QtGui, QtWidgets import base64 import os from return_png import img as retu # 引入img变量,赋别名为pdf_cf class Ui_PdfZ(object): def setupUi(self, PdfZ): tmp = open(\'return.png\', \'wb\') # 创建临时的文件 tmp.write(base64.b64decode(retu)) # 把这个one图片解码出来,写入文件中去。 tmp.close() PdfZ.setObjectName(\"PdfZ\") PdfZ.resize(1400, 814) PdfZ.setMinimumSize(QtCore.QSize(1400, 814)) PdfZ.setMaximumSize(QtCore.QSize(1400, 814)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) PdfZ.setPalette(palette) self.Reback = QtWidgets.QToolButton(PdfZ) self.Reback.setGeometry(QtCore.QRect(10, 10, 51, 41)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ToolTipBase, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ToolTipBase, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ToolTipBase, brush) self.Reback.setPalette(palette) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(\"return.png\"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.Reback.setIcon(icon) self.Reback.setIconSize(QtCore.QSize(100, 100)) self.Reback.setAutoRaise(True) self.Reback.setObjectName(\"Reback\") self.label = QtWidgets.QLabel(PdfZ) self.label.setGeometry(QtCore.QRect(88, 8, 171, 41)) font = QtGui.QFont() font.setFamily(\"微软雅黑\") font.setPointSize(16) font.setBold(True) font.setWeight(75) self.label.setFont(font) self.label.setObjectName(\"label\") self.frame = QtWidgets.QFrame(PdfZ) self.frame.setGeometry(QtCore.QRect(20, 60, 1351, 161)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) self.frame.setPalette(palette) self.frame.setAutoFillBackground(True) self.frame.setFrameShape(QtWidgets.QFrame.Box) self.frame.setFrameShadow(QtWidgets.QFrame.Plain) self.frame.setLineWidth(1) self.frame.setMidLineWidth(0) self.frame.setObjectName(\"frame\") self.scwd = QtWidgets.QPushButton(self.frame) self.scwd.setGeometry(QtCore.QRect(570, 30, 191, 61)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) self.scwd.setPalette(palette) font = QtGui.QFont() font.setFamily(\"微软雅黑\") font.setPointSize(16) font.setBold(True) font.setWeight(75) self.scwd.setFont(font) self.scwd.setAutoFillBackground(True) self.scwd.setAutoDefault(False) self.scwd.setDefault(False) self.scwd.setFlat(True) self.scwd.setObjectName(\"scwd\") self.label_2 = QtWidgets.QLabel(self.frame) self.label_2.setGeometry(QtCore.QRect(620, 100, 131, 21)) font = QtGui.QFont() font.setFamily(\"微软雅黑\") self.label_2.setFont(font) self.label_2.setObjectName(\"label_2\") self.frame_2 = QtWidgets.QFrame(PdfZ) self.frame_2.setGeometry(QtCore.QRect(1050, 280, 321, 301)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(245, 255, 250)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) self.frame_2.setPalette(palette) self.frame_2.setAutoFillBackground(True) self.frame_2.setFrameShape(QtWidgets.QFrame.NoFrame) self.frame_2.setFrameShadow(QtWidgets.QFrame.Plain) self.frame_2.setLineWidth(1) self.frame_2.setMidLineWidth(0) self.frame_2.setObjectName(\"frame_2\") self.label_3 = QtWidgets.QLabel(self.frame_2) self.label_3.setGeometry(QtCore.QRect(20, 20, 191, 31)) font = QtGui.QFont() font.setFamily(\"微软雅黑\") font.setPointSize(14) font.setBold(False) font.setWeight(50) self.label_3.setFont(font) self.label_3.setObjectName(\"label_3\") self.xzwd = QtWidgets.QPushButton(self.frame_2) self.xzwd.setGeometry(QtCore.QRect(30, 200, 271, 61)) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.PlaceholderText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.PlaceholderText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 217, 159)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush) brush = QtGui.QBrush(QtGui.QColor(120, 120, 120)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush) brush = QtGui.QBrush(QtGui.QColor(0, 0, 0, 128)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.PlaceholderText, brush) self.xzwd.setPalette(palette) font = QtGui.QFont() font.setFamily(\"微软雅黑\") font.setPointSize(14) font.setBold(True) font.setWeight(75) self.xzwd.setFont(font) self.xzwd.setAutoFillBackground(True) self.xzwd.setAutoDefault(False) self.xzwd.setDefault(False) self.xzwd.setFlat(True) self.xzwd.setObjectName(\"xzwd\") self.label_4 = QtWidgets.QLabel(self.frame_2) self.label_4.setGeometry(QtCore.QRect(30, 70, 141, 21)) font = QtGui.QFont() font.setFamily(\"微软雅黑\") self.label_4.setFont(font) self.label_4.setObjectName(\"label_4\") self.textEdit = QtWidgets.QTextEdit(self.frame_2) self.textEdit.setGeometry(QtCore.QRect(60, 110, 61, 41)) font = QtGui.QFont() font.setFamily(\"微软雅黑\") font.setPointSize(12) font.setBold(True) font.setWeight(75) self.textEdit.setFont(font) self.textEdit.setObjectName(\"textEdit\") self.label_5 = QtWidgets.QLabel(self.frame_2) self.label_5.setGeometry(QtCore.QRect(150, 120, 31, 21)) font = QtGui.QFont() font.setFamily(\"微软雅黑\") self.label_5.setFont(font) self.label_5.setObjectName(\"label_5\") self.textEdit_2 = QtWidgets.QTextEdit(self.frame_2) self.textEdit_2.setGeometry(QtCore.QRect(200, 110, 61, 41)) font = QtGui.QFont() font.setFamily(\"微软雅黑\") font.setPointSize(12) font.setBold(True) font.setWeight(75) self.textEdit_2.setFont(font) self.textEdit_2.setObjectName(\"textEdit_2\") self.label_7 = QtWidgets.QLabel(PdfZ) self.label_7.setGeometry(QtCore.QRect(450, 250, 71, 21)) font = QtGui.QFont() font.setFamily(\"微软雅黑\") self.label_7.setFont(font) self.label_7.setObjectName(\"label_7\") self.label_6 = QtWidgets.QLabel(PdfZ) self.label_6.setGeometry(QtCore.QRect(270, 290, 461, 511)) self.label_6.setFrameShape(QtWidgets.QFrame.Box) self.label_6.setFrameShadow(QtWidgets.QFrame.Plain) self.label_6.setLineWidth(1) self.label_6.setMidLineWidth(0) self.label_6.setText(\"\") self.label_6.setObjectName(\"label_6\") self.retranslateUi(PdfZ) QtCore.QMetaObject.connectSlotsByName(PdfZ) os.remove(\"return.png\") def retranslateUi(self, PdfZ): _translate = QtCore.QCoreApplication.translate PdfZ.setWindowTitle(_translate(\"PdfZ\", \"PDFZWORD\")) self.Reback.setText(_translate(\"PdfZ\", \"...\")) self.label.setText(_translate(\"PdfZ\", \"PDFZWORD\")) self.scwd.setText(_translate(\"PdfZ\", \"+ 上传文档\")) self.label_2.setText(_translate(\"PdfZ\", \"上传文档至此\")) self.label_3.setText(_translate(\"PdfZ\", \"操作\")) self.xzwd.setText(_translate(\"PdfZ\", \"开始转换\")) self.label_4.setText(_translate(\"PdfZ\", \"页码选择(请勿输0):\")) self.label_5.setText(_translate(\"PdfZ\", \"到\")) self.label_7.setText(_translate(\"PdfZ\", \"PDF预览\"))
二、main.py实现主要功能程序如下:
class pdwwindow(QtWidgets.QWidget,Ui_PdfZ): def __init__(self): super(pdwwindow, self).__init__() self.setupUi(self) def re_back(self): self.close() def sctp(self): fileName, fileType = QtWidgets.QFileDialog.getOpenFileName(self, \"选取文件\", os.getcwd(),\"自定义(*.pdf;*);;All Files(*)\") self.f = str(fileName) self.p, self.s =self.f.split(\".\") try: if self.s == \"pdf\": # 打开文件 doc = fitz.open(self.f) # 读取一页 0代表第1页 page_one = doc.loadPage(0) # 将第一页转换为Pixmap page_pixmap = page_one.getPixmap() # 将Pixmap转换为QImage image_format = QImage.Format_RGBA8888 if page_pixmap.alpha else QImage.Format_RGB888 page_image = QImage(page_pixmap.samples, page_pixmap.width,page_pixmap.height, page_pixmap.stride, image_format) # width = page_image.width() # height = page_image.height() # QImage 转为QPixmap pix = QPixmap.fromImage(page_image) # 设置图片大小自适应标签 self.label_6.setScaledContents(True) # 给标签设置图像 self.label_6.setPixmap(pix) else: msg_box = QMessageBox(QMessageBox.Warning,\"错误\", \"文件不是 pdf 文件,请重新选择!\") msg_box.exec_() except Exception as e: pass def xzwj(self): docx_file = \"{}_pdfZword.docx\".format(self.p) str1 = self.textEdit.toPlainText() num1 = int(str1) str2 = self.textEdit_2.toPlainText() num2 = int(str2) if num1==num2: num1=num1-1 cv = Converter(self.f) cv.convert(docx_file, start=num1, end=num2) cv.close() root = tkinter.Tk() root.withdraw() tkinter.messagebox.showinfo(\"提示\", \"成功下载到源文件所在文件夹\")
说明如下:
(1) def sctp(self): 其中的sctp为按钮的objectName属性名字;def xzwj(self):其中的xzwj为按钮的objectName属性名字;
(2) 可通过点击按钮实现本地文件上传;
fileName, fileType = QtWidgets. QFileDialog.getOpenFileName(self, "选取文件", os.getcwd(), "自定义(*.jpg;*.png;*.jpeg;*);;All Files(*)")
(3) 增加了防错功能,当上传的文档格式不是pdf时,将不执行程序,同时提示错误;
(4) 将pdf第一页转为图片,并用label组件显示;
(5) 在def xzwj(self):程序中可实现按页数提取word;
(6) 借助converter模块实现转化word。
三、最后在主程序中加入以上子程序。
if __name__ ==\"__main__\": import sys app = QtWidgets.QApplication(sys.argv) win = mywindow() pw = pdwwindow() win.show() win.pdf_word.clicked.connect(win.pic_main) win.pdf_word.clicked.connect(pw.show) pw.Reback.clicked.connect(pw.re_back) pw.Reback.clicked.connect(win.show) pw.scwd.clicked.connect(pw.sctp) pw.xzwd.clicked.connect(pw.xzwj) sys.exit(app.exec_())
四、总结
本文介绍的pdf转word功能还有一些待完善地方,例如可增加预览功能,实现每页预览。当然我们可以在后续阶段逐渐完善。
© 版权声明
THE END
暂无评论内容