Organisieren Sie Ihre Bilder in PDFs und erfahren Sie, wie Sie mit Tkinter dieses praktische Dienstprogramm erstellen.

Von Geschäftsberichten bis hin zu Fotoportfolios werden Sie häufig auf die Notwendigkeit stoßen, Bilder in PDFs zu verwenden. Ein Bild-zu-PDF-Konverter kann dabei helfen, den Prozess zu rationalisieren. Obwohl online viele kostenlose Tools verfügbar sind, kann die Notwendigkeit, dass Sie Bilder hochladen, ein Datenschutz- oder Sicherheitsrisiko darstellen.

Stattdessen können Sie mit Python einen Offline-Bild-zu-PDF-Konverter erstellen. Wählen Sie mehrere Bilder im JPG- oder PNG-Format aus, erhalten Sie eine Vorschau und konvertieren Sie sie in ein PDF unter Beibehaltung der ursprünglichen Bildgröße.

Das Tkinter-, Pillow- und ReportLab-Modul

Tkinter ist die Standard-GUI-Bibliothek für Python. Es bietet eine Vielzahl von Widgets wie Schaltflächen, Beschriftungen und Textfelder, die die Entwicklung von Apps wie z Musikspieler oder ein Gewichtsumrechnungstool. Um Tkinter auf Ihrem System zu installieren, öffnen Sie ein Terminal und geben Sie Folgendes ein:

pip install tkinter

Das Pillow-Modul ist eine leistungsstarke Python-Bildbibliothek, die es einfach macht, Vorgänge an Bildern wie Größenänderung, Zuschneiden und Filtern durchzuführen. Integrieren Sie dies mit Mit der OpenAI-API und DALL·E 2 können Sie Bilder mithilfe einer Texteingabeaufforderung generieren.

Um Pillow zu installieren, führen Sie diesen Befehl aus:

pip install Pillow

ReportLab ist eine Open-Source-Python-Bibliothek zum Generieren von PDFs und Grafiken. Es verfügt über verschiedene Tools, mit denen Sie Dokumente mit Bildern, Text und Tabellen erstellen können, was es nützlich macht, Berichte per Programmierung zu erstellen. Damit können Sie gleichzeitig Geschäftsberichte, Rechnungen und Zertifikate erstellen Hinzufügen eines Textwasserzeichens. So installieren Sie ReportLab:

pip install reportlab

Definieren Sie die Struktur des Bild-zu-PDF-Konverters

Den gesamten Quellcode zum Erstellen des Bild-zu-PDF-Konverters mit Python finden Sie hier GitHub-Repository.

Importieren Sie die erforderlichen Module und erstellen Sie eine Klasse mit dem Namen ImageToPDFConverter. Definieren Sie eine Konstruktormethode, die die Klasse initialisiert und das Root-Fensterobjekt von Tkinter als Argument verwendet. Initialisieren Sie eine leere Liste, um die Pfade der vom Benutzer ausgewählten Bilder zu speichern. Legen Sie den Titel und die Abmessungen der Anwendung fest. Erstellen Sie zwei Schaltflächen mit dem Namen Wählen Sie Bilder aus Und In PDF konvertieren.

Übergeben Sie das Fenster, in dem Sie die Schaltfläche platzieren möchten, den Text, den sie anzeigen sollen, den Befehl, den sie beim Klicken ausführen sollen, und das Schriftformat, das sie anwenden sollen. Organisieren Sie die Schaltflächen mithilfe der Pack() Methode und geben Sie ihnen eine Polsterung von 10 in vertikaler Richtung.

import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
from reportlab.lib.pagesizes import landscape
from reportlab.pdfgen import canvas

classImageToPDFConverter:
def__init__(self, root):
self.root = root
self.image_paths = []
self.root.title("Image to PDF Converter")
self.root.geometry("750x600")
self.select_images_button = tk.Button(self.root, text="Select Images", command=self.select_images, font=("Helvetica", 12),)
self.select_images_button.pack(pady=10)
self.convert_to_pdf_button = tk.Button(self.root, text="Convert to PDF", command=self.convert_to_pdf, font=("Helvetica", 12),)
self.convert_to_pdf_button.pack(pady=10)

Definieren Sie eine Beschriftung, indem Sie ihr das übergeordnete Fenster, in dem sie platziert werden soll, den anzuzeigenden Text, das zu verwendende Schriftformat und einen vertikalen Abstand von 10 (Pixeln) übergeben.

Definieren Sie auf ähnliche Weise einen Rahmen, um eine Vorschau des ausgewählten Bildes anzuzeigen, und legen Sie dessen übergeordnetes Fenster, Breite und Höhe fest. Organisieren Sie es mit einer Polsterung von 10.

 self.select_images_label = tk.Label(self.root, text="Select Images", font=("Helvetica", 14))
self.select_images_label.pack(pady=10)
self.preview_frame = tk.Frame(self.root, width=380, height=200)
self.preview_frame.pack(pady=10)

Auswählen des Bildes und Erstellen einer Vorschau

Definieren Sie eine Methode, select_images(). Verwenden Sie Tkinter Dateidialog Klasse, um ein Dialogfeld zu öffnen, in dem Sie mehrere Bilder auswählen und in der speichern können images_path Liste. Übergeben Sie das anfängliche Verzeichnis, das das Dialogfeld öffnen soll, den Titel, den es anzeigen soll, und die Dateitypen, die zur Auswahl zugelassen sind.

Definieren Sie eine Schleife, die alle Pfade der vom Benutzer ausgewählten Bilder durchläuft. Verwenden Sie Kissen offen() -Methode, um die Bilddatei zu öffnen und die maximale Größe, die sie haben sollte, an die Resize-Methode zu übergeben. Konvertieren Sie dieses PIL-Bild in FotoBild das mit Tkinter kompatibel ist. Erstellen Sie eine Beschriftung, die sich in dem zuvor erstellten Vorschaurahmen befindet, und zeigen Sie das Bild an. Benutzen Sie die Netz Manager, um die Bilder in einem Rasterlayout mit drei Spalten zu organisieren.

defselect_images(self):
self.image_paths = filedialog.askopenfilenames(initialdir="/", title="Select Images", filetypes=(("Image Files", "*.jpg *.png"),))

for i, image_path in enumerate(self.image_paths):
image = Image.open(image_path)
image = self.resize_image(image, width=150, height=150)
photo = ImageTk.PhotoImage(image)
label = tk.Label(self.preview_frame, image=photo)
label.image = photo
label.grid(row=i // 3, column=i % 3, padx=10, pady=10)

Definieren Sie eine Methode, Bildgröße anpassen() Dadurch wird die Größe des Bildes unter Berücksichtigung der Bildgröße und der zuvor definierten maximalen Größe geändert. Berechnen Sie das Seitenverhältnis und legen Sie damit die neue Breite und Höhe fest. Verwenden Sie die Größenänderungsmethode von PIL, um die Größe des Bildes zu ändern und dabei das Seitenverhältnis beizubehalten. Verwenden Sie bilineare Interpolation als Resampling, um ein glatteres Ergebnis zu erzielen.

defresize_image(self, image, width, height):
aspect_ratio = min(width / float(image.size[0]), height / float(image.size[1]))
new_width = int(aspect_ratio * image.size[0])
new_height = int(aspect_ratio * image.size[1])
resized_image = image.resize((new_width, new_height), resample=Image.Resampling.BILINEAR)
return resized_image

Konvertieren der Bilder in PDF

Definieren Sie eine Funktion, konvertieren_in_pdf(). Verwenden Sie den Dateidialog, um nach dem Zielpfad für das PDF zu fragen. Legen Sie die Standarderweiterung und den Dateityp fest als .pdf. Verwenden Sie das Canvas-Modul von ReportLab, um eine Seite im Querformat zu zeichnen. Durchlaufen Sie den Pfad der Bilder, öffnen Sie sie, stellen Sie die Abmessungen der PDF-Seite auf die gleichen wie die des Bildes ein und zeichnen Sie das Bild von der oberen linken Ecke mit den angegebenen Abmessungen.

Der showPage() Mit der Methode kann das PDF zur nächsten Seite verschoben werden. Sobald das Programm diesen Vorgang abgeschlossen hat, speichern Sie die PDF-Datei und zeigen Sie ein Meldungsfeld mit dem Pfad an.

defconvert_to_pdf(self):
pdf_path = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=(("PDF Files", "*.pdf"),))
c = canvas.Canvas(pdf_path, pagesize=landscape)
for image_path in self.image_paths:
image = Image.open(image_path)
width, height = image.size
c.setPageSize((width, height))
c.drawImage(image_path, 0, 0, width=width, height=height)
c.showPage()
c.save()
messagebox.showinfo("Conversion Successful", f"PDF saved at {pdf_path}")

Erstellen Sie das Tkinter-Root-Fenster und übergeben Sie es an die Klasseninstanz. Der Hauptschleife() Die Funktion weist Python an, die Tkinter-Ereignisschleife auszuführen und auf Ereignisse zu warten, bis Sie das Fenster schließen.

if __name__ == "__main__":
root = tk.Tk()
app = ImageToPDFConverter(root)
root.mainloop()

Fügen Sie den gesamten Code zusammen und der Bild-zu-PDF-Konverter ist einsatzbereit.

Beispielausgabe für die Konvertierung von Bildern in PDF mit Python

Wenn Sie die App ausführen, wird ein Fenster mit zwei Schaltflächen und einer Leerstelle angezeigt, in dem Sie aufgefordert werden, die Bilder auszuwählen.

Beim Klicken auf Wählen Sie Bilder aus Klicken Sie auf die Schaltfläche. Es erscheint ein Fenster, in dem Sie aufgefordert werden, die Bilder auszuwählen. Sie können beliebig viele Bilder in beliebiger Kombination auswählen.

Sobald Sie Ihre gewünschten Bilder ausgewählt haben, sehen Sie eine Vorschau davon:

Wenn Sie auf die Schaltfläche „In PDF konvertieren“ klicken, können Sie den Namen und den Pfad auswählen, in dem Sie die PDF-Datei speichern möchten. Sobald das Programm die Konvertierung abgeschlossen hat, zeigt es eine Meldung an, dass die PDF-Datei gespeichert wurde, gefolgt vom Pfadnamen. Beim Öffnen der PDF-Datei werden Sie feststellen, dass das Programm die Bilder konvertiert hat, ohne ihre Abmessungen zu ändern.

PDF-Operationen, die Sie zur Verbesserung Ihrer Anwendungen implementieren können

Sie können eine vollwertige PDF-Anwendung erstellen, die Vorgänge wie Zusammenführen, Komprimieren, Schützen und Entsperren ausführt PDFs. Sie können eine Funktion erstellen, um die PDF-Datei in mehrere Seiten aufzuteilen, sie zu drehen, bestimmte Seiten zu entfernen, sie zu sortieren und Seiten hinzuzufügen Zahlen.

Sie können auch mit anderen Dateiformaten experimentieren, um ein Dokument oder eine Präsentation in PDF zu konvertieren. Mehrere Module wie PyPDF2, PDFMiner, fpdf und pdfrw können Ihnen dabei helfen, diese Ziele bequemer zu erreichen.