-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpdf_merg2.py
More file actions
101 lines (82 loc) · 4.56 KB
/
Copy pathpdf_merg2.py
File metadata and controls
101 lines (82 loc) · 4.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QListWidget, QPushButton, QVBoxLayout, QWidget, QMessageBox
from PyPDF2 import PdfReader, PdfWriter
from tempfile import NamedTemporaryFile
import subprocess
import sys
import shutil
class PDFMergerApp(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("PDF Merger")
self.setGeometry(100, 100, 400, 300)
self.file_list = QListWidget(self)
self.file_list.setGeometry(10, 10, 380, 180)
#setGeometry(x,y,Breite,Hoehe)
self.add_btn = QPushButton("Add PDFs", self)
self.add_btn.setGeometry(10, 200, 100, 30)
self.add_btn.clicked.connect(self.addPDFs)
self.merge_btn = QPushButton("Merge PDF", self)
self.merge_btn.setGeometry(10, 250, 100, 30)
self.merge_btn.clicked.connect(self.mergePDFs)
self.view_btn = QPushButton("View Merged PDF", self)
self.view_btn.setGeometry(120, 200, 150, 30)
self.view_btn.clicked.connect(self.viewMergedPDF)
self.save_btn = QPushButton("Save Merged PDF", self)
self.save_btn.setGeometry(280, 200, 110, 30)
self.save_btn.clicked.connect(self.saveMergedPDF)
self.show()
def addPDFs(self):
options = QFileDialog.Options()
options |= QFileDialog.ReadOnly
files, _ = QFileDialog.getOpenFileNames(self, "Select PDF Files", "", "PDF Files (*.pdf);;All Files (*)", options=options)
for file in files:
#Die Dateipfade werden in die Liste eingefuegt
self.file_list.addItem(file)
def mergePDFs(self):
merger = PdfWriter()
for row in range(self.file_list.count()):
#Aus der Liste werden die Elemente zugegriffen
item = self.file_list.item(row)
#Extrahiert den Text (in diesem Fall den Dateipfad) aus dem QListWidgetItem-Objekt item
pdf_path = item.text()
#Die PDF-Dateien werden gelesen
reader = PdfReader(pdf_path)
#Fuer jede PDF-Datei wird die erste Seite genommen und zusammengefuegt
merger.add_page(reader.pages[0])
#Eine temporaere Datei wird erstellt die nicht automatisch geloescht wird, wenn sie geschlossen wird.
with NamedTemporaryFile(delete=False) as temp_pdf:
#Die ausgewaehlten Seiten werden in temp_pdf abgespeichert (dabei werden die Seiten in der Instanz merger zwischengespeichert)
merger.write(temp_pdf)
temp_pdf_path = temp_pdf.name
self.temp_pdf_path = temp_pdf_path
def viewMergedPDF(self):
'''Die Zeile if hasattr(self, 'temp_pdf_path') and os.path.exists(self.temp_pdf_path): überprüft,
ob das aktuelle Objekt (self) ein Attribut namens 'temp_pdf_path' hat
und ob die Datei mit dem Pfad self.temp_pdf_path tatsächlich auf dem Dateisystem existiert.'''
if hasattr(self, 'temp_pdf_path') and os.path.exists(self.temp_pdf_path):
'''Die Zeile subprocess.Popen(["start", "", self.temp_pdf_path], shell=True) startet einen Prozess unter Windows,
um eine Datei mit dem Standardprogramm für diese Dateityp zu oeffnen.
Im vorliegenden Fall wird versucht, die temporäre PDF-Datei self.temp_pdf_path zu öffnen.'''
subprocess.Popen(["start", "", self.temp_pdf_path], shell=True)
else:
print("Merged PDF does not exist yet.")
def saveMergedPDF(self):
if hasattr(self, 'temp_pdf_path') and os.path.exists(self.temp_pdf_path):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
file_name, _ = QFileDialog.getSaveFileName(self, "Save Merged PDF", "", "PDF Files (*.pdf);;All Files (*)", options=options)
if file_name:
'''Wenn file_name einen Wert hat (d.h. der Benutzer hat einen Speicherort und einen Dateinamen ausgewählt),
wird die Datei am temporaeren Pfad self.temp_pdf_path (wo die zusammengeführte PDF-Datei erstellt wurde) in den ausgewaehlten Speicherort kopiert.
Die Funktion shutil.copy2 kopiert die Datei und behaelt dabei einige Metadaten wie Zeitstempel bei.'''
shutil.copy2(self.temp_pdf_path, file_name)
QMessageBox.information(self, "Save Successful", "Merged PDF has been saved.")
else:
print("Merged PDF does not exist yet.")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = PDFMergerApp()
sys.exit(app.exec_())