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_())