1. 环境配置
    python 3.10
    PyPDF2 1.26.0
    PySide6 6.2.3
    IDE PyCharm社区版

  2. 界面设计
    Qt设计师路径在PySide6目录下,我的路径为: \Lib\site-packages\PySide6
    使用 Qt设计师拖拉拽一个界面
    在这里插入图片描述
    将ui文件保存到python项目的ui文件夹中,项目结构如图所示
    在这里插入图片描述
    main_window.ui是ui文件
    main.py是入口文件
    main_window.py是界面相关逻辑文件
    pdf_encrypt.py是加密pdf的文件

  3. 代码
    pdf_encrypt.py
    ‘# type:PdfFileReader’ 是做类型说明,不然后面的pdf_reader没有方法提示,就很*疼

from PyPDF2 import PdfFileReader, PdfFileWriter

"""
@filename: /pdf_encrypt.py
@Author: 四十
@createtime: 2022/3/19-20:35
@Description: ... 
"""


def encrypt(path, pwd):
    try:
        pdf_reader = PdfFileReader(stream=path, strict=False)  # type:PdfFileReader
    except Exception as e:
        return e
    filepath = path[:path.rfind("/")] + "/"
    filename = path.split("/")[-1].split(".")
    file_suffix = filename[1]
    if file_suffix != "pdf":
        return "Please select a pdf file!"
    filename = filename[0] + "_pwd.pdf"

    pdf_writer = PdfFileWriter()  # type:PdfFileWriter
    try:
        for page in range(pdf_reader.getNumPages()):
            pdf_writer.addPage(pdf_reader.getPage(page))
    except Exception as e:
        return e
    pdf_writer.encrypt(pwd)
    print(filepath + filename)
    try:
        with open(filepath + filename, "wb") as f:
            pdf_writer.write(f)
    except Exception as e:
        return e
    else:
        return "Encrypt Done!"


if __name__ == '__main__':
    a = "C:/Users/Administrator/Desktop/test.pdf"
    print(encrypt(a, "123456"))

main_window.py

"""
@filename: /main_window.py
@Author: 四十
@createtime: 2022/3/19-22:10
@Description: ... 
"""
from PySide6.QtCore import QFile
from PySide6.QtWidgets import QWidget, QFileDialog, QDialog, QTextEdit
from PySide6.QtUiTools import QUiLoader
from pdf_encrypt import encrypt


class MyDialog(QDialog):
    """

    """

    def __init__(self, title, content):
        super().__init__()
        self.setModal(True)
        self.title = title
        self.setWindowTitle(self.title)
        self.setFixedSize(260, 230)
        self.text_edit = QTextEdit(self)
        self.text_edit.setStyleSheet("border:none;margin:10,10,10,10")
        self.text_edit.setEnabled(False)
        self.content = content
        self.text_edit.setText(content)

        self.show()
        self.exec()


class MainWindow(QWidget):
    def __init__(self):
        # 通过QFile读取ui文件
        qfile = QFile("ui/main_window.ui")
        qfile.open(QFile.ReadOnly)
        qfile.close()
        # 加载ui, action_info,pushButton_file_broswer等都是Qt设计师中设置的objectName
        self.ui = QUiLoader().load(qfile)
        self.ui.setWindowTitle("PDF Encrypt")
        self.ui.pushButton_file_broswer.clicked.connect(self.open_file_dialog)
        self.ui.action_info.triggered.connect(self.about_dialog)

        self.ui.pushButton_encryot.clicked.connect(self.encrypt_file)

    def open_file_dialog(self):
        dialog = QFileDialog(self.ui)
        dialog.setNameFilter("*.pdf")  # 设置文件过滤,只显示pdf文件
        dialog.setViewMode(QFileDialog.Detail)
        if dialog.exec():
            filenames = dialog.selectedFiles()
            self.ui.textEdit_filepath.setText(filenames[0])  # 将路径放入文本框

    def get_filepath(self):
        return self.ui.textEdit_filepath.toPlainText()

    def get_password(self):
        return self.ui.textEdit_password.toPlainText()

    def encrypt_file(self):
        path = self.get_filepath()
        password = self.get_password()
        self.ui.label_tips_content.setStyleSheet("QLabel{color:red}")
        if len(path) == 0:
            self.ui.label_tips_content.setText("Please select a pdf file")
            return
        if len(password) == 0:
            self.ui.label_tips_content.setText("Please input a password!")
            return
        result = encrypt(path, password)

        self.result_dialog(str(result))

    @staticmethod
    def result_dialog(content):
        MyDialog("PDF Encrypt Result", content)

    @staticmethod
    def about_dialog():
        MyDialog("PDF Encrypt", "Dev by:  sishi\nVersion: 0.0.00.01")

main.py

"""
@filename: /main.py
@Author: 四十
@createtime: 2022/3/20-15:43
@Description: ... 
"""
from PySide6.QtWidgets import QApplication

from main_window import MainWindow

if __name__ == '__main__':
    app = QApplication()
    window = MainWindow()
    window.ui.show()
    app.exec()
  1. 运行效果
    在这里插入图片描述

  2. 总结
    一个简单的小工具,勉强能用吧.还有很多可以提高的地方,先记录在这里,免得时间一长就忘了.
    接下来还有打包,用pyinstaller就行, 下次再说吧!

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐