Organisez vos images en PDF et apprenez à utiliser Tkinter pour créer cet utilitaire pratique.
Des rapports commerciaux aux portfolios de photographies, vous aurez souvent besoin d'utiliser des images dans les PDF. Un convertisseur d'image en PDF peut aider à rationaliser le processus. Bien qu'il existe de nombreux outils gratuits disponibles en ligne, leur besoin de télécharger des images peut être un problème de confidentialité ou de sécurité.
Au lieu de cela, vous pouvez créer un convertisseur d'image en PDF hors ligne à l'aide de Python. Sélectionnez plusieurs images au format JPG ou PNG, obtenez un aperçu et convertissez-les en PDF tout en conservant la taille d'origine de l'image.
Les modules Tkinter, Pillow et ReportLab
Tkinter est la bibliothèque graphique standard pour Python. Il offre une variété de widgets tels que des boutons, des étiquettes et des zones de texte qui facilitent le développement d'applications telles qu'un Lecteur de musique ou un outil de conversion de poids. Pour installer Tkinter sur votre système, ouvrez un terminal et tapez :
pip install tkinter
Le module Pillow est une puissante bibliothèque d'imagerie Python qui facilite l'exécution d'opérations sur des images telles que le redimensionnement, le recadrage et le filtrage. Intégrer cela avec API OpenAI et DALL·E 2, vous pouvez générer des images à l'aide d'une invite de texte.
Pour installer Pillow, exécutez cette commande :
pip install Pillow
ReportLab est une bibliothèque Python open source pour générer des PDF et des graphiques. Il dispose de divers outils que vous pouvez utiliser pour générer des documents avec des images, du texte et des tableaux, ce qui le rend utile pour générer des rapports via la programmation. Avec cela, vous pouvez créer des rapports commerciaux, des factures et des certificats tout en ajouter un filigrane de texte. Pour installer ReportLab :
pip install reportlab
Définir la structure du convertisseur d'image en PDF
Vous pouvez trouver l'intégralité du code source pour la création du convertisseur d'image en PDF à l'aide de Python dans ce Référentiel GitHub.
Importez les modules nécessaires et créez une classe nommée ImageToPDFConverter. Définissez une méthode constructeur qui initialise la classe et prend l'objet fenêtre racine de Tkinter comme argument. Initialise une liste vide pour stocker les chemins des images sélectionnées par l'utilisateur. Définissez le titre et les dimensions de l'application. Créez deux boutons nommés Sélectionner des images et Convertir en PDF.
Passez la fenêtre dans laquelle vous souhaitez placer le bouton, le texte qu'il doit afficher, la commande qu'il doit exécuter lorsqu'il est cliqué et le format de police qu'il doit appliquer. Organisez les boutons à l'aide des paquet() méthode et leur donner un rembourrage de 10 dans la direction 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)
Définissez une étiquette en lui transmettant la fenêtre parente dans laquelle la placer, le texte qu'elle doit afficher, le format de police qu'elle doit utiliser et un remplissage vertical de 10 (pixels).
De même, définissez un cadre pour prévisualiser l'image sélectionnée et définissez sa fenêtre parente, sa largeur et sa hauteur. Organisez-le avec un rembourrage de 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)
Sélection de l'image et création d'un aperçu
Définir une méthode, select_images(). Utilisez Tkinter dialogue de fichier classe pour ouvrir une boîte de dialogue permettant de sélectionner plusieurs images et de les stocker dans la images_path liste. Transmettez le répertoire initial que la boîte de dialogue doit ouvrir, le titre qu'elle doit afficher et les types de fichiers qu'elle permet de sélectionner.
Définissez une boucle qui itère sur tous les chemins des images sélectionnées par l'utilisateur. Utilisez les oreillers ouvrir() pour ouvrir le fichier image et transmettre la dimension maximale qu'il doit posséder à la méthode de redimensionnement. Convertir cette image PIL en PhotoImage qui est compatible avec Tkinter. Créez une étiquette qui réside dans le cadre d'aperçu que vous avez créé précédemment et affichez l'image. Utilisez le grille gestionnaire pour organiser les images dans une disposition de grille avec trois colonnes.
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)
Définir une méthode, redimensionner_image() qui redimensionne l'image en tenant compte de la dimension de l'image et de la dimension maximale que vous avez définie précédemment. Calculez le rapport d'aspect et utilisez-le pour définir la nouvelle largeur et la hauteur. Utilisez la méthode de redimensionnement de PIL pour redimensionner l'image en gardant le rapport d'aspect intact. Utilisez l'interpolation bilinéaire comme rééchantillonnage pour un résultat plus fluide.
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
Conversion des images en PDF
Définir une fonction, convertir_en_pdf(). Utilisez la boîte de dialogue de fichier pour demander le chemin de destination du PDF. Définissez l'extension et le type de fichier par défaut sur .pdf. Utilisez le module canvas de ReportLab pour dessiner une page paysage. Parcourez le chemin des images, ouvrez-les, définissez les dimensions de la page du PDF de la même manière que celles de l'image et dessinez l'image à partir du coin supérieur gauche avec les dimensions spécifiées.
Le afficherPage() permet au PDF de passer à la page suivante. Une fois que le programme a terminé ce processus, enregistrez le PDF et affichez une boîte de message avec le chemin.
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}")
Créez la fenêtre racine de Tkinter et transmettez-la à l'instance de classe. Le boucle principale() La fonction indique à Python d'exécuter la boucle d'événements Tkinter et d'écouter les événements jusqu'à ce que vous fermiez la fenêtre.
if __name__ == "__main__":
root = tk.Tk()
app = ImageToPDFConverter(root)
root.mainloop()
Rassemblez tout le code et le convertisseur d'image en PDF est prêt à l'emploi.
Exemple de sortie de conversion d'images en PDF à l'aide de Python
Lors de l'exécution de l'application, vous verrez une fenêtre avec deux boutons et un espace vide vous demandant de sélectionner les images.
En cliquant sur le Sélectionner des images, une fenêtre apparaît vous demandant de choisir les images. Vous pouvez sélectionner n'importe quel nombre d'images dans n'importe quelle combinaison.
Une fois que vous avez sélectionné les images souhaitées, vous en verrez un aperçu :
En cliquant sur le bouton Convertir en PDF, vous pouvez sélectionner le nom et le chemin où vous souhaitez stocker le fichier PDF. Une fois que le programme a terminé la conversion, il affiche une boîte de message indiquant qu'il a enregistré le PDF suivi du nom du chemin. En ouvrant le PDF, vous constaterez que le programme a converti les images sans changer leurs dimensions.
Opérations PDF que vous pouvez implémenter pour améliorer vos applications
Vous pouvez créer une application PDF à part entière qui effectue des opérations telles que la fusion, la compression, la protection et le déverrouillage PDF. Vous pouvez créer une fonction pour diviser le PDF en plusieurs pages, les faire pivoter, supprimer des pages particulières, le trier et ajouter une page Nombres.
Vous pouvez également expérimenter d'autres formats de fichiers pour convertir un document ou une présentation en PDF. Plusieurs modules, tels que PyPDF2, PDFMiner, fpdf et pdfrw, peuvent vous aider à les atteindre plus facilement.