Οργανώστε τις εικόνες σας σε PDF και μάθετε πώς να χρησιμοποιείτε το Tkinter για να δημιουργήσετε αυτό το εύχρηστο βοηθητικό πρόγραμμα.

Από επιχειρηματικές αναφορές έως χαρτοφυλάκια φωτογραφίας, θα συναντήσετε συχνά την ανάγκη να χρησιμοποιήσετε εικόνες σε PDF. Ένας μετατροπέας εικόνας σε PDF μπορεί να βοηθήσει στον εξορθολογισμό της διαδικασίας. Ενώ υπάρχουν πολλά δωρεάν εργαλεία διαθέσιμα στο διαδίκτυο, η ανάγκη τους να ανεβάσετε εικόνες μπορεί να είναι ανησυχία για το απόρρητο ή την ασφάλεια.

Αντίθετα, μπορείτε να δημιουργήσετε έναν μετατροπέα εικόνας σε PDF εκτός σύνδεσης χρησιμοποιώντας την Python. Επιλέξτε πολλές εικόνες σε μορφή JPG ή PNG, λάβετε μια προεπισκόπηση και μετατρέψτε τις σε PDF διατηρώντας το αρχικό μέγεθος εικόνας.

Η ενότητα Tkinter, Pillow και ReportLab

Το Tkinter είναι η τυπική βιβλιοθήκη GUI για την Python. Προσφέρει μια ποικιλία γραφικών στοιχείων όπως κουμπιά, ετικέτες και πλαίσια κειμένου που διευκολύνουν την ανάπτυξη εφαρμογών όπως συσκευή αναπαραγωγής μουσικής ή ένα εργαλείο μετατροπής βάρους. Για να εγκαταστήσετε το Tkinter στο σύστημά σας, ανοίξτε ένα τερματικό και πληκτρολογήστε:

pip install tkinter

Η λειτουργική μονάδα Pillow είναι μια ισχυρή βιβλιοθήκη απεικόνισης Python που διευκολύνει την εκτέλεση λειτουργιών σε εικόνες όπως αλλαγή μεγέθους, περικοπή και φιλτράρισμα. Ενσωμάτωση αυτού με OpenAI API και DALL·E 2, μπορείτε να δημιουργήσετε εικόνες χρησιμοποιώντας μια προτροπή κειμένου.

Για να εγκαταστήσετε το Pillow, εκτελέστε αυτήν την εντολή:

pip install Pillow

Το ReportLab είναι μια βιβλιοθήκη Python ανοιχτού κώδικα για τη δημιουργία PDF και γραφικών. Διαθέτει διάφορα εργαλεία που μπορείτε να χρησιμοποιήσετε για τη δημιουργία εγγράφων με εικόνες, κείμενο και πίνακες, γεγονός που καθιστά χρήσιμο τη δημιουργία αναφορών μέσω προγραμματισμού. Με αυτό, μπορείτε να δημιουργήσετε επιχειρηματικές αναφορές, τιμολόγια και πιστοποιητικά ενώ επίσης προσθέτοντας ένα υδατογράφημα κειμένου. Για να εγκαταστήσετε το ReportLab:

pip install reportlab

Καθορίστε τη δομή του μετατροπέα εικόνας σε PDF

Μπορείτε να βρείτε ολόκληρο τον πηγαίο κώδικα για τη δημιουργία του μετατροπέα εικόνας σε PDF χρησιμοποιώντας την Python σε αυτό Αποθετήριο GitHub.

Εισαγάγετε τις απαραίτητες ενότητες και δημιουργήστε μια κλάση με το όνομα Μετατροπέας ImageToPDFC. Ορίστε μια μέθοδο κατασκευής που αρχικοποιεί την κλάση και λαμβάνει ως όρισμα το αντικείμενο παραθύρου ρίζας του Tkinter. Εκκινήστε μια κενή λίστα για να αποθηκεύσετε τις διαδρομές των εικόνων που επιλέγει ο χρήστης. Ορίστε τον τίτλο και τις διαστάσεις της εφαρμογής. Δημιουργήστε δύο κουμπιά με όνομα Επιλέξτε Εικόνες και Μετατροπή σε PDF.

Περάστε το παράθυρο στο οποίο θέλετε να τοποθετήσετε το κουμπί, το κείμενο που πρέπει να εμφανίσουν, την εντολή που πρέπει να εκτελέσουν όταν κάνετε κλικ και τη μορφή γραμματοσειράς που πρέπει να εφαρμόσουν. Οργανώστε τα κουμπιά χρησιμοποιώντας το πακέτο() μέθοδο και δώστε τους μια επένδυση 10 στην κατακόρυφη κατεύθυνση.

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)

Καθορίστε μια ετικέτα περνώντας την στο γονικό παράθυρο για να την τοποθετήσετε, το κείμενο που πρέπει να εμφανίζει, τη μορφή γραμματοσειράς που πρέπει να χρησιμοποιεί και μια κατακόρυφη επένδυση 10 (pixel).

Ομοίως, ορίστε ένα πλαίσιο για προεπισκόπηση της επιλεγμένης εικόνας και ορίστε το γονικό παράθυρο, το πλάτος και το ύψος της. Οργανώστε το με μια επένδυση 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)

Επιλογή εικόνας και δημιουργία προεπισκόπησης

Ορίστε μια μέθοδο, select_images(). Χρησιμοποιήστε το Tkinter's filedialog κλάση για να ανοίξετε ένα παράθυρο διαλόγου για να επιλέξετε πολλές εικόνες και να τις αποθηκεύσετε στο εικόνες_διαδρομή λίστα. Περάστε τον αρχικό κατάλογο που πρέπει να ανοίξει το παράθυρο διαλόγου, τον τίτλο που πρέπει να εμφανίσει και τους τύπους αρχείων που επιτρέπει την επιλογή.

Ορίστε έναν βρόχο που επαναλαμβάνεται σε όλες τις διαδρομές των εικόνων που επέλεξε ο χρήστης. Χρησιμοποιήστε μαξιλάρια Άνοιξε() μέθοδο για να ανοίξετε το αρχείο εικόνας και να μεταβιβάσετε τη μέγιστη διάσταση που πρέπει να έχει στη μέθοδο αλλαγής μεγέθους. Μετατρέψτε αυτήν την εικόνα PIL σε PhotoImage που είναι συμβατό με το Tkinter. Δημιουργήστε μια ετικέτα που βρίσκεται στο πλαίσιο προεπισκόπησης που δημιουργήσατε νωρίτερα και εμφανίστε την εικόνα. Χρησιμοποιήστε το πλέγμα διαχειριστή για να οργανώσει τις εικόνες σε διάταξη πλέγματος με τρεις στήλες.

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)

Ορίστε μια μέθοδο, resize_image() που αλλάζει το μέγεθος της εικόνας λαμβάνοντας υπόψη τη διάσταση της εικόνας και τη μέγιστη διάσταση που ορίσατε νωρίτερα. Υπολογίστε τον λόγο διαστάσεων και χρησιμοποιήστε τον για να ορίσετε το νέο πλάτος και ύψος. Χρησιμοποιήστε τη μέθοδο αλλαγής μεγέθους του PIL για να αλλάξετε το μέγεθος της εικόνας διατηρώντας ανέπαφη την αναλογία διαστάσεων. Χρησιμοποιήστε διγραμμική παρεμβολή ως επαναδειγματοληψία για πιο ομαλό αποτέλεσμα.

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

Μετατροπή των εικόνων σε PDF

Ορίστε μια συνάρτηση, convert_to_pdf(). Χρησιμοποιήστε το διάλογο αρχείων για να ζητήσετε τη διαδρομή προορισμού για το PDF. Ορίστε την προεπιλεγμένη επέκταση και τον τύπο αρχείου ως .pdf. Χρησιμοποιήστε τη λειτουργική μονάδα καμβά του ReportLab για να σχεδιάσετε μια οριζόντια σελίδα. Επαναλάβετε τη διαδρομή των εικόνων, ανοίξτε τις, ορίστε τις διαστάσεις της σελίδας του PDF ίδιες με αυτές της εικόνας και σχεδιάστε την εικόνα από την επάνω αριστερή γωνία με τις καθορισμένες διαστάσεις.

ο showPage() Η μέθοδος επιτρέπει στο PDF να μετακινηθεί στην επόμενη σελίδα. Μόλις το πρόγραμμα ολοκληρώσει αυτήν τη διαδικασία, αποθηκεύστε το PDF και εμφανίστε ένα πλαίσιο μηνύματος μαζί με τη διαδρομή.

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}")

Δημιουργήστε το ριζικό παράθυρο Tkinter και περάστε το στην παρουσία κλάσης. ο mainloop() Η συνάρτηση λέει στην Python να εκτελέσει τον βρόχο συμβάντων Tkinter και να ακούει συμβάντα μέχρι να κλείσει το παράθυρο.

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

Συνδυάστε όλο τον κώδικα και ο μετατροπέας εικόνας σε PDF είναι έτοιμος για χρήση.

Παράδειγμα εξόδου μετατροπής εικόνων σε PDF χρησιμοποιώντας Python

Κατά την εκτέλεση της εφαρμογής, θα δείτε ένα παράθυρο με δύο κουμπιά και έναν κενό χώρο που σας καθοδηγεί να επιλέξετε τις εικόνες.

Κάνοντας κλικ στο Επιλέξτε Εικόνες κουμπί, εμφανίζεται ένα παράθυρο που σας ζητά να επιλέξετε τις εικόνες. Μπορείτε να επιλέξετε οποιονδήποτε αριθμό εικόνων σε οποιονδήποτε συνδυασμό.

Αφού επιλέξετε τις επιθυμητές εικόνες, θα δείτε μια προεπισκόπηση αυτών:

Κάνοντας κλικ στο κουμπί Μετατροπή σε PDF, μπορείτε να επιλέξετε το όνομα και τη διαδρομή όπου θέλετε να αποθηκεύσετε το αρχείο PDF. Μόλις το πρόγραμμα ολοκληρώσει τη μετατροπή, εμφανίζει ένα πλαίσιο μηνύματος που λέει ότι έχει αποθηκεύσει το PDF ακολουθούμενο από το όνομα της διαδρομής. Ανοίγοντας το PDF θα διαπιστώσετε ότι το πρόγραμμα έχει μετατρέψει τις εικόνες χωρίς να αλλάξει τις διαστάσεις τους.

Λειτουργίες PDF που μπορείτε να εφαρμόσετε για να βελτιώσετε τις εφαρμογές σας

Μπορείτε να δημιουργήσετε μια πλήρη εφαρμογή PDF που εκτελεί λειτουργίες όπως συγχώνευση, συμπίεση, προστασία και ξεκλείδωμα PDF. Μπορείτε να δημιουργήσετε μια δυνατότητα για να χωρίσετε το PDF σε πολλές σελίδες, να τις περιστρέψετε, να αφαιρέσετε συγκεκριμένες σελίδες, να το ταξινομήσετε και να προσθέσετε σελίδα αριθμοί.

Μπορείτε επίσης να πειραματιστείτε με άλλες μορφές αρχείων για τη μετατροπή ενός εγγράφου ή μιας παρουσίασης σε PDF. Πολλές ενότητες, όπως τα PyPDF2, PDFMiner, fpdf και pdfrw, μπορούν να σας βοηθήσουν να τα επιτύχετε πιο εύκολα.