PDF
Alles was mit PDF Programmen zu tun hat

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

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

Eine Ausführbare Datei daraus erstellen


PDF Selfhost Online Toools Stirling PDF Tools

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

  