Direkt zum Hauptinhalt

Python script zum entschlüsseln von PDF

Beschreibung:

Ein Python script das eine zum bearbeitende gesperrte PDF entsperrt in dem es die PDF nochmals Druckt und speichert.

Vorrausetzungen

pip install pyqt5 PyPDF2

Das Script

 

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QFileDialog, QMessageBox
from PyPDF2 import PdfReader, PdfWriter

class PDFPasswordRemover(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # Layouts
        
        mainLayout = QVBoxLayout()
        sourceLayout = QHBoxLayout()
        targetLayout = QHBoxLayout()
        topLayout = QHBoxLayout()
        # Setzen Sie die Größe des Hauptfensters
        self.resize(500, 200)  # Ändern Sie diese Werte nach Bedarf
        self.setWindowTitle("Entfernen von Kennwort")

        # Über Button
        aboutButton = QPushButton("Über", self)
        aboutButton.clicked.connect(self.showAboutInfo)
        topLayout.addWidget(aboutButton)
        topLayout.addStretch()

        # Source file widgets
        self.sourceEntry = QLineEdit(self)
        sourceBrowseButton = QPushButton("Quelle Durchsuchen", self)
        sourceBrowseButton.clicked.connect(self.browseSourceFile)
        sourceLayout.addWidget(self.sourceEntry)
        sourceLayout.addWidget(sourceBrowseButton)

        # Target file widgets
        self.targetEntry = QLineEdit(self)
        targetSaveButton = QPushButton("Ziel Durchsuchen", self)
        targetSaveButton.clicked.connect(self.saveTargetFile)
        targetLayout.addWidget(self.targetEntry)
        targetLayout.addWidget(targetSaveButton)

        # Decrypt button
        decryptButton = QPushButton("Entschlüsseln", self)
        decryptButton.clicked.connect(self.decryptPDF)

        # Result label
        self.resultLabel = QLabel("", self)

        # Adding widgets to main layout
        mainLayout.addLayout(topLayout)
        mainLayout.addLayout(sourceLayout)
        mainLayout.addLayout(targetLayout)
        mainLayout.addWidget(decryptButton)
        mainLayout.addWidget(self.resultLabel)

        self.setLayout(mainLayout)
        self.setWindowTitle("Entfernen von Kennwort")

    def showAboutInfo(self):
        QMessageBox.about(self, "Über", "Hacker-Net Telekommunikation\nAm Wunderburgpark 5b\n26135 Oldenburg\n\nhttps://www.hacker-net.de")


    def browseSourceFile(self):
        file_path, _ = QFileDialog.getOpenFileName(self, "Quell-PDF wählen", "", "PDF Files (*.pdf)")
        if file_path:
            self.sourceEntry.setText(file_path)

    def saveTargetFile(self):
        file_path, _ = QFileDialog.getSaveFileName(self, "Ziel-PDF speichern", "", "PDF Files (*.pdf)")
        if file_path:
            self.targetEntry.setText(file_path)

    def decryptPDF(self):
        source = self.sourceEntry.text()
        target = self.targetEntry.text()
        if source and target:
            message = self.removePassword(source, target)
            self.resultLabel.setText(message)
        else:
            self.resultLabel.setText("Bitte wählen Sie die Quell- und Zielpfade aus.")

    def removePassword(self, source_path, target_path):
        try:
            reader = PdfReader(source_path)
            writer = PdfWriter()
            for page in reader.pages:
                writer.add_page(page)
            with open(target_path, "wb") as output_pdf:
                writer.write(output_pdf)
            return "Erfolg: PDF wurde erfolgreich gespeichert."
        except Exception as e:
            return f"Fehler: {e}"

def main():
    app = QApplication([])
    ex = PDFPasswordRemover()
    ex.show()
    app.exec_()

if __name__ == '__main__':
    main()

Möchte man das Script in eine einzelne Ausführbare Datei packen.
Ist pyinstaller nützlich.
Siehe hier : Python als Einzel Executable