编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

PyQt 5.0自学笔记(6)pdf文件转jpg图片软件编写

wxchong 2024-06-23 19:05:24 开源技术 10 ℃ 0 评论

一、界面的设计(Qt Designer)

代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'pdf2jpg.ui'
#
# Created by: PyQt5 UI code generator 5.15.0
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog_main(object):
    def setupUi(self, Dialog_main):
        Dialog_main.setObjectName("Dialog_main")
        Dialog_main.resize(429, 112)
        Dialog_main.setMinimumSize(QtCore.QSize(429, 112))
        Dialog_main.setMaximumSize(QtCore.QSize(429, 112))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("baby.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Dialog_main.setWindowIcon(icon)
        self.pushButton_ok = QtWidgets.QPushButton(Dialog_main)
        self.pushButton_ok.setGeometry(QtCore.QRect(240, 80, 75, 23))
        self.pushButton_ok.setObjectName("pushButton_ok")
        self.pushButton_cancel = QtWidgets.QPushButton(Dialog_main)
        self.pushButton_cancel.setGeometry(QtCore.QRect(340, 80, 75, 23))
        self.pushButton_cancel.setObjectName("pushButton_cancel")
        self.lineEdit_file = QtWidgets.QLineEdit(Dialog_main)
        self.lineEdit_file.setGeometry(QtCore.QRect(130, 10, 241, 20))
        self.lineEdit_file.setObjectName("lineEdit_file")
        self.lineEdit_fold = QtWidgets.QLineEdit(Dialog_main)
        self.lineEdit_fold.setGeometry(QtCore.QRect(130, 40, 241, 20))
        self.lineEdit_fold.setObjectName("lineEdit_fold")
        self.label_file = QtWidgets.QLabel(Dialog_main)
        self.label_file.setGeometry(QtCore.QRect(10, 10, 111, 16))
        self.label_file.setObjectName("label_file")
        self.label_fold = QtWidgets.QLabel(Dialog_main)
        self.label_fold.setGeometry(QtCore.QRect(10, 40, 91, 16))
        self.label_fold.setObjectName("label_fold")
        self.pushButton_add = QtWidgets.QPushButton(Dialog_main)
        self.pushButton_add.setGeometry(QtCore.QRect(380, 10, 41, 23))
        self.pushButton_add.setObjectName("pushButton_add")
        self.pushButton_add2 = QtWidgets.QPushButton(Dialog_main)
        self.pushButton_add2.setGeometry(QtCore.QRect(380, 40, 41, 23))
        self.pushButton_add2.setObjectName("pushButton_add2")

        self.retranslateUi(Dialog_main)
        self.pushButton_cancel.clicked.connect(Dialog_main.close)
        QtCore.QMetaObject.connectSlotsByName(Dialog_main)

    def retranslateUi(self, Dialog_main):
        _translate = QtCore.QCoreApplication.translate
        Dialog_main.setWindowTitle(_translate("Dialog_main", "pdf2jpg"))
        self.pushButton_ok.setText(_translate("Dialog_main", "OK"))
        self.pushButton_cancel.setText(_translate("Dialog_main", "Cancel"))
        self.label_file.setText(_translate("Dialog_main", "选择需转换的文件"))
        self.label_fold.setText(_translate("Dialog_main", "选择输出文件夹"))
        self.pushButton_add.setText(_translate("Dialog_main", "添加"))
        self.pushButton_add2.setText(_translate("Dialog_main", "添加"))

主程序代码:

from PyQt5 import QtWidgets
from pdf2jpg import Ui_Dialog_main # 导入ui文件转换后的py文件
from PyQt5.QtWidgets import QFileDialog
import pandas as pd
import fitz
from operator import itemgetter
import os,sys
import time
#from saveFile import a_save_txt

class mywindow(QtWidgets.QWidget, Ui_Dialog_main):
    def  __init__ (self):
        super(mywindow, self).__init__()
        self.setupUi(self)
        self.pushButton_add2.clicked.connect(self.write_folder)
        self.pushButton_add.clicked.connect(self.read_file)
        self.pushButton_ok.clicked.connect(self.process)

    def read_file(self):
        #选取文件
        filename, filetype =QFileDialog.getOpenFileName(self, "选取文件", "C:/", "Text Files(*.pdf)")#"All Files(*);
        print(filename, filetype)
        self.lineEdit_file.setText(filename)

    def write_folder(self):
        #选取文件夹
        foldername = QFileDialog.getExistingDirectory(self, "选取文件夹", "C:/")
        print(foldername)
        self.lineEdit_fold.setText(foldername)



    # 进行处理
    def process(self):
        try:
            #获取文件路径
            file_path = self.lineEdit_file.text()
            #取文件名
            fname=os.path.splitext(file_path)
            filename=os.path.split(fname[0])
            print(filename)
            print(filename[1])
            #获取文件夹路径
            folder_path = self.lineEdit_fold.text()+"/"+filename[1]
            sTime = time.time()
            pdfDoc = fitz.open(file_path)
            for pg in range(pdfDoc.pageCount):
                page = pdfDoc[pg]
                pix = page.getPixmap(alpha=False)  # 默认是720*x尺寸
                if not os.path.exists(folder_path):
                    os.makedirs(folder_path)
                pix.writePNG(folder_path + '/' + 'images_%s.jpg' % pg)  # 将图片写入指定的文件夹内
            #读取文本
                #
            # 读取文件
            #my_df = pd.read_csv(file_path, encoding = 'mbcs')

            # 中间可以进行对文件的任意操作

            # 进行csv输出
            #my_df.to_csv(folder_path + '\result.csv')


            eTime = time.time()
            s = eTime - sTime
            print('花费的时间为:%.2f秒' % (s))
            success_result = r'转换成功!'
            self.setWindowTitle(success_result)
            #打开成功后的文件夹

            os.startfile(folder_path)

        except:
            fail_result = r'转换失败!'
            self.setWindowTitle(fail_result)

if __name__=="__main__":
    import sys
    app=QtWidgets.QApplication(sys.argv)
    ui = mywindow()
    ui.show()
    sys.exit(app.exec_())

经测试可以通过

生成可执行文件。

>pyinstaller -F -w pdf2jpg_server.py


此可执行文件有需要的可留言。

完成后自动打开所在文件夹。收工。下一步接着完善。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表