在平素使命中,咱们时常会遭遇一些被加密的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替换为你的剧本文献名。运行上述高歌后偷窥自拍美女,将在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_()) 本站仅提供存储处事,扫数本体均由用户发布,如发现存害或侵权本体,请点击举报。