文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于PyQt5如何完成pdf转word功能

2023-07-02 08:24

关注

本篇内容介绍了“基于PyQt5如何完成pdf转word功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

PyQt是Qt框架的Python语言实现,是最强大的GUI库之一。PyQt提供了一个设计良好的窗口控件集合,具有更方便的操作性。学过VB的同学会知道,相比与VB的使用,在界面设计上元素更丰富。

先看界面:

基于PyQt5如何完成pdf转word功能

一、界面PdfZ.ui可参考之前的文章如何实现,程序代码如下:

from PyQt5 import QtCore, QtGui, QtWidgetsimport  base64import osfrom 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_())

“基于PyQt5如何完成pdf转word功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯