Organizza le tue immagini in PDF e impara a utilizzare Tkinter per creare questa comoda utility.

Dai rapporti aziendali ai portfolio fotografici, ti imbatterai spesso nella necessità di utilizzare le immagini nei PDF. Un convertitore da immagine a PDF può aiutare a semplificare il processo. Sebbene ci siano molti strumenti gratuiti disponibili online, la loro necessità di caricare immagini potrebbe essere un problema di privacy o sicurezza.

Invece, puoi creare un convertitore da immagine a PDF offline usando Python. Seleziona più immagini in formato JPG o PNG, ottieni un'anteprima e convertile in un PDF mantenendo le dimensioni dell'immagine originale.

Il modulo Tkinter, Pillow e ReportLab

Tkinter è la libreria GUI standard per Python. Offre una varietà di widget come pulsanti, etichette e caselle di testo che semplificano lo sviluppo di app come a lettore musicale o uno strumento di conversione del peso. Per installare Tkinter nel tuo sistema, apri un terminale e digita:

pip install tkinter
instagram viewer

Il modulo Pillow è una potente libreria di immagini Python che semplifica l'esecuzione di operazioni sulle immagini come il ridimensionamento, il ritaglio e il filtraggio. Integrando questo con OpenAI API e DALL·E 2, puoi generare immagini utilizzando un prompt di testo.

Per installare Pillow, esegui questo comando:

pip install Pillow

ReportLab è una libreria Python open source per la generazione di PDF e grafica. Ha vari strumenti che puoi utilizzare per generare documenti con immagini, testo e tabelle che lo rendono utile per generare report tramite programmazione. Con questo, puoi anche creare report aziendali, fatture e certificati aggiungendo una filigrana di testo. Per installare ReportLab:

pip install reportlab

Definire la struttura del convertitore da immagine a PDF

Puoi trovare l'intero codice sorgente per creare il convertitore da immagine a PDF usando Python in questo Deposito GitHub.

Importa i moduli necessari e crea una classe denominata ImageToPDFConverter. Definisci un metodo di costruzione che inizializzi la classe e prenda come argomento l'oggetto finestra radice di Tkinter. Inizializza un elenco vuoto per memorizzare i percorsi delle immagini selezionate dall'utente. Impostare il titolo e le dimensioni dell'applicazione. Crea due pulsanti denominati Seleziona Immagini E Converti in PDF.

Passa la finestra in cui vuoi posizionare il pulsante, il testo che dovrebbero visualizzare, il comando che dovrebbero eseguire quando si fa clic e il formato del carattere che dovrebbero applicare. Organizzare i pulsanti utilizzando il pacchetto() metodo e dare loro un riempimento di 10 nella direzione verticale.

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)

Definisci un'etichetta passandole la finestra principale in cui posizionarla, il testo che dovrebbe visualizzare, il formato del carattere che dovrebbe usare e un riempimento verticale di 10 (pixel).

Allo stesso modo, definire una cornice per visualizzare in anteprima l'immagine selezionata e impostarne la finestra principale, la larghezza e l'altezza. Organizzalo con un padding di 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)

Selezione dell'immagine e creazione di un'anteprima

Definire un metodo, seleziona_immagini(). Usa Tkinter filedialog class per aprire una finestra di dialogo per selezionare più immagini e memorizzarle nel file percorso_immagini elenco. Passa la directory iniziale che la finestra di dialogo dovrebbe aprire, il titolo che dovrebbe visualizzare e i tipi di file che consente la selezione.

Definire un ciclo che itera su tutti i percorsi delle immagini selezionate dall'utente. Usa il cuscino aprire() metodo per aprire il file immagine e passare la dimensione massima che dovrebbe possedere al metodo di ridimensionamento. Converti questa immagine PIL in FotoImmagine compatibile con Tkinter. Crea un'etichetta che risiede nella cornice di anteprima che hai creato in precedenza e visualizza l'immagine. Usa il griglia manager per organizzare le immagini in un layout a griglia con tre colonne.

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)

Definire un metodo, ridimensiona_immagine() che ridimensiona l'immagine tenendo conto della dimensione dell'immagine e della dimensione massima definita in precedenza. Calcola le proporzioni e utilizzale per impostare la nuova larghezza e altezza. Usa il metodo di ridimensionamento di PIL per ridimensionare l'immagine mantenendo intatte le proporzioni. Usa l'interpolazione bilineare come ricampionamento per un risultato più fluido.

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

Conversione delle immagini in PDF

Definire una funzione, converti_in_pdf(). Usa la finestra di dialogo file per chiedere il percorso di destinazione del PDF. Imposta l'estensione e il tipo di file predefiniti come .PDF. Usa il modulo canvas di ReportLab per disegnare una pagina orizzontale. Scorri il percorso delle immagini, aprile, imposta le dimensioni della pagina del PDF uguali a quelle dell'immagine e disegna l'immagine dall'angolo in alto a sinistra con le dimensioni specificate.

IL mostraPagina() metodo consente al PDF di passare alla pagina successiva. Una volta che il programma ha completato questo processo, salva il PDF e mostra una finestra di messaggio insieme al percorso.

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

Crea la finestra root di Tkinter e passala all'istanza della classe. IL ciclo principale() La funzione dice a Python di eseguire il ciclo di eventi Tkinter e di ascoltare gli eventi finché non chiudi la finestra.

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

Metti insieme tutto il codice e il convertitore da immagine a PDF è pronto per l'uso.

Esempio di output della conversione di immagini in PDF utilizzando Python

Durante l'esecuzione dell'app, vedrai una finestra con due pulsanti e uno spazio vuoto che ti chiede di selezionare le immagini.

Facendo clic sul Seleziona Immagini pulsante, si apre una finestra che chiede di scegliere le immagini. È possibile selezionare qualsiasi numero di immagini in qualsiasi combinazione.

Dopo aver selezionato le immagini desiderate, ne vedrai un'anteprima:

Facendo clic sul pulsante Converti in PDF, è possibile selezionare il nome e il percorso in cui si desidera archiviare il file PDF. Una volta che il programma ha terminato la conversione, visualizza una finestra di messaggio che dice che ha salvato il PDF seguito dal nome del percorso. Aprendo il PDF scoprirai che il programma ha convertito le immagini senza modificarne le dimensioni.

Operazioni PDF che puoi implementare per migliorare le tue applicazioni

Puoi creare un'applicazione PDF completa che esegue operazioni come l'unione, la compressione, la protezione e lo sblocco PDF. Puoi creare una funzione per dividere il PDF in più pagine, ruotarle, rimuovere pagine particolari, ordinarle e aggiungere pagine numeri.

Puoi sperimentare anche altri formati di file per convertire un documento o una presentazione in PDF. Diversi moduli, come PyPDF2, PDFMiner, fpdf e pdfrw, possono aiutarti a raggiungere questi obiettivi in ​​modo più conveniente.