PDF

Alles was mit PDF Programmen zu tun hat

PDF entschlüsseln

PDF entschlüsseln

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 auch zum Download : removepermission.py 


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

PDF komprimieren

PDF komprimieren

Quelltext PDF compress

Beschreibung:

Ein python script mit Grafischer oberfläche, das eine riesen PDF komprimiert.

Das Script:

import sys
import PyPDF2
import subprocess
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog, QMessageBox, QLabel
from PyQt5.QtCore import Qt  # Hinzugefügt


# Externe Funktion für die PDF-Komprimierung
def compress_pdf(source_path, output_path):
    try:
        subprocess.run([
            "gs", "-sDEVICE=pdfwrite", "-dCompatibilityLevel=1.4",
            "-dPDFSETTINGS=/ebook",  # Ändern Sie dies für unterschiedliche Komprimierungslevel
            "-dNOPAUSE", "-dBATCH", "-dQUIET",
            f"-sOutputFile={output_path}", source_path
        ], check=True)
    except subprocess.CalledProcessError as e:
        raise RuntimeError(f"Ein Fehler ist aufgetreten: {e}")
    except Exception as e:
        raise RuntimeError(f"Ein unerwarteter Fehler ist aufgetreten: {e}")


class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'PDF Komprimieren'
        self.source_pdf_path = ''
        self.target_pdf_path = ''
        self.initUI()
    
    def initUI(self):
        self.setWindowTitle(self.title)
        layout = QVBoxLayout()

        # Titel Label
        self.label_title = QLabel(self.title, self)
        self.label_title.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.label_title)

        # Button für Quelldatei
        self.btn_browse_source = QPushButton('Quelle Durchsuchen', self)
        self.btn_browse_source.clicked.connect(self.openSourceFileDialog)
        layout.addWidget(self.btn_browse_source)

        # Button für Zieldatei
        self.btn_browse_target = QPushButton('Ziel Durchsuchen', self)
        self.btn_browse_target.clicked.connect(self.openTargetFileDialog)
        layout.addWidget(self.btn_browse_target)

        # Verkleinern-Button
        self.btn_compress = QPushButton('Verkleinern', self)
        self.btn_compress.clicked.connect(self.compressPDF)
        layout.addWidget(self.btn_compress)

        # Über-Button
        self.btn_about = QPushButton('Über', self)
        self.btn_about.clicked.connect(self.showAboutInfo)
        layout.addWidget(self.btn_about)

        self.setLayout(layout)
        self.adjustSize()  # Passt die Größe an die Widgets an

        # Setzt die feste Breite des Fensters
        self.setFixedWidth(500)
        self.show()

    def openSourceFileDialog(self):
        options = QFileDialog.Options()
        fileName, _ = QFileDialog.getOpenFileName(self, "Quelldatei auswählen", "", "PDF-Dateien (*.pdf)", options=options)
        if fileName:
            self.source_pdf_path = fileName

    def openTargetFileDialog(self):
        options = QFileDialog.Options()
        fileName, _ = QFileDialog.getSaveFileName(self, "Zieldatei speichern", "", "PDF-Dateien (*.pdf)", options=options)
        if fileName:
            self.target_pdf_path = fileName

    def showAboutInfo(self):
        QMessageBox.information(self, "Über", "Hacker-Net Telekommunikation\nAm Wunderburgpark 5b\n26135 Oldenburg")

    

    def compressPDF(self):
        if self.source_pdf_path and self.target_pdf_path:
            try:
                # Rufen Sie die externe Komprimierungsfunktion auf
                compress_pdf(self.source_pdf_path, self.target_pdf_path)
                QMessageBox.information(self, "Erfolg", "PDF erfolgreich komprimiert und gespeichert!")
            except Exception as e:
                QMessageBox.warning(self, "Fehler", str(e))
        else:
            QMessageBox.warning(self, "Fehler", "Bitte wählen Sie sowohl eine Quell- als auch eine Zieldatei.")



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

Das Script zum direct download hier
Das Programm icon, wenn an eine Executable draus erstellen möchte zum direct download hier

PDF komprimieren

Eine Ausführbare Datei daraus erstellen

PDF Selfhost Online Toools Stirling PDF Tools

PDF Selfhost Online Toools Stirling PDF Tools

Installation via Docker

Beschreibung:

https://github.com/Stirling-Tools/Stirling-PDF?tab=readme-ov-file