91porn 91porn python铁心完满PDF解密(含GUI及打包技术)
发布日期:2024-10-19 09:50 点击次数:98
在平日职责中91porn 91porn,咱们时常会遭遇一些被加密的PDF文献。为了大要顺利地阅读或剪辑这些文献,咱们需要先破解其密码。本文将先容怎样诞生一个带有图形用户界面(GUI)的PDF解密器具,不错精真金不怕火地选择文献并解密PDF文档。
图片
器具选择与环境准备诞生PDF解密器具所需的环境包括Python编程说话偏激一些库:
PyPDF2:用于读取和写入PDF文献。PyQt5:用于创建图形用户界面。PyInstaller:用于将Python剧本打包成可践诺文献。率先,确保你已装置所需的库,不错使用以下敕令进行装置:pip install PyPDF2 PyQt5 pyinstallerGUI界面的策动与完满咱们的器具需要一个疏忽的用户界面,使用户大要选择加密的PDF文献、选择解密后的保存旅途,并泄露解密过程。咱们使用PyQt5来完满这个界面。
启动化界面率先,咱们创建一个PDFDecryptor类,收受自QWidget,并在其中启动化界面元素。
童颜巨乳import sysfrom PyPDF2 import PdfReader, PdfWriterfrom PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QFileDialog, QTextEdit, QLabelclass PDFDecryptor(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('PDF解密器具') self.setGeometry(100, 100, 600, 400) layout = QVBoxLayout() self.file_label = QLabel('选择加密的PDF文献:') layout.addWidget(self.file_label) self.file_button = QPushButton('选择文献') self.file_button.clicked.connect(self.select_file) layout.addWidget(self.file_button) self.output_label = QLabel('选择解密后的PDF文献保存旅途:') layout.addWidget(self.output_label) self.output_button = QPushButton('选择旅途') self.output_button.clicked.connect(self.select_output_path) layout.addWidget(self.output_button) self.decrypt_button = QPushButton('来源解密') self.decrypt_button.clicked.connect(self.decrypt_pdf) layout.addWidget(self.decrypt_button) self.log = QTextEdit() self.log.setReadOnly(True) layout.addWidget(self.log) self.setLayout(layout)文献选择与旅途选择
接下来,咱们完满文献选择和旅途采费力能。这两个功能通过点击按钮来触发,并在日记区域泄露用户的选择。
def select_file(self): options = QFileDialog.Options() file_path, _ = QFileDialog.getOpenFileName(self, '选择加密的PDF文献', '', 'PDF Files (*.pdf)', options=options) if file_path: self.file_path = file_path self.log.append(f'选择的文献: {file_path}')def select_output_path(self): options = QFileDialog.Options() folder_path = QFileDialog.getExistingDirectory(self, '选择解密后的PDF文献保存旅途', options=options) if folder_path: self.output_path = folder_path self.log.append(f'保存旅途: {folder_path}')解密功能的完满在用户选择文献和保存旅途后,点击“来源解密”按钮即可触发解密操作。咱们通过调用load_pdf法式来读取并解密PDF文献,然后使用PdfWriter将解密后的施行写入新的PDF文献。
def decrypt_pdf(self): if hasattr(self, 'file_path'): input_path = self.file_path if not hasattr(self, 'output_path'): output_path = ''.join(input_path.split('.')[:-1]) + '_decrypted.pdf' else: output_path = f'{self.output_path}/{input_path.split('/')[-1].split('.')[0]}_decrypted.pdf' self.log.append('正在解密...') pdf_reader = self.load_pdf(input_path) if pdf_reader is None: self.log.append('未能读取施行') elif not pdf_reader.is_encrypted: self.log.append('文献未加密,无需操作') else: pdf_writer = PdfWriter() pdf_writer.append_pages_from_reader(pdf_reader) with open(output_path, 'wb') as output_file: pdf_writer.write(output_file) self.log.append(f'解密文献已生成: {output_path}') else: self.log.append('请先选择PDF文献')def load_pdf(self, file_path): try: pdf_file = open(file_path, 'rb') except Exception as error: self.log.append('无法掀开文献: ' + str(error)) return None reader = PdfReader(pdf_file, strict=False) if reader.is_encrypted: try: reader.decrypt('') except Exception as error: self.log.append('无法解密文献: ' + str(error)) return None return reader运行主法子
终末,咱们在主法子中运行咱们的PDF解密器具。
if __name__ == '__main__': app = QApplication(sys.argv) ex = PDFDecryptor() ex.show() sys.exit(app.exec_())打包成可践诺文献为了精真金不怕火用户使用,咱们不错将该Python剧本打包成一个可践诺文献。使用PyInstaller不错铁心完满这小数:
pyinstaller --onefile --windowed pdf解密.py
将pdf解密.py替换为你的剧本文献名。运行上述敕令后91porn 91porn,将在dist文献夹中生成一个可践诺文献,不错顺利运行它来使用咱们的PDF解密器具。
圆善代码共享import sysfrom PyPDF2 import PdfReader, PdfWriterfrom PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QFileDialog, QTextEdit, QLabelclass PDFDecryptor(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('PDF解密器具') self.setGeometry(100, 100, 600, 400) layout = QVBoxLayout() self.file_label = QLabel('选择加密的PDF文献:') layout.addWidget(self.file_label) self.file_button = QPushButton('选择文献') self.file_button.clicked.connect(self.select_file) layout.addWidget(self.file_button) self.output_label = QLabel('选择解密后的PDF文献保存旅途:') layout.addWidget(self.output_label) self.output_button = QPushButton('选择旅途') self.output_button.clicked.connect(self.select_output_path) layout.addWidget(self.output_button) self.decrypt_button = QPushButton('来源解密') self.decrypt_button.clicked.connect(self.decrypt_pdf) layout.addWidget(self.decrypt_button) self.log = QTextEdit() self.log.setReadOnly(True) layout.addWidget(self.log) self.setLayout(layout) def select_file(self): options = QFileDialog.Options() file_path, _ = QFileDialog.getOpenFileName(self, '选择加密的PDF文献', '', 'PDF Files (*.pdf)', options=options) if file_path: self.file_path = file_path self.log.append(f'选择的文献: {file_path}') def select_output_path(self): options = QFileDialog.Options() folder_path = QFileDialog.getExistingDirectory(self, '选择解密后的PDF文献保存旅途', options=options) if folder_path: self.output_path = folder_path self.log.append(f'保存旅途: {folder_path}') def decrypt_pdf(self): if hasattr(self, 'file_path'): input_path = self.file_path if not hasattr(self, 'output_path'): output_path = ''.join(input_path.split('.')[:-1]) + '_decrypted.pdf' else: output_path = f'{self.output_path}/{input_path.split('/')[-1].split('.')[0]}_decrypted.pdf' self.log.append('正在解密...') pdf_reader = self.load_pdf(input_path) if pdf_reader is None: self.log.append('未能读取施行') elif not pdf_reader.is_encrypted: self.log.append('文献未加密,无需操作') else: pdf_writer = PdfWriter() pdf_writer.append_pages_from_reader(pdf_reader) with open(output_path, 'wb') as output_file: pdf_writer.write(output_file) self.log.append(f'解密文献已生成: {output_path}') else: self.log.append('请先选择PDF文献') def load_pdf(self, file_path): try: pdf_file = open(file_path, 'rb') except Exception as error: self.log.append('无法掀开文献: ' + str(error)) return None reader = PdfReader(pdf_file, strict=False) if reader.is_encrypted: try: reader.decrypt('') except Exception as error: self.log.append('无法解密文献: ' + str(error)) return None return readerif __name__ == '__main__': app = QApplication(sys.argv) ex = PDFDecryptor() ex.show() sys.exit(app.exec_()) 本站仅提供存储做事,通盘施行均由用户发布,如发现存害或侵权施行,请点击举报。