Direkt zum Hauptinhalt

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