Organice sus imágenes en archivos PDF y aprenda a usar Tkinter para crear esta práctica utilidad.

Desde informes comerciales hasta portafolios de fotografías, a menudo se encontrará con la necesidad de usar imágenes en archivos PDF. Un convertidor de imagen a PDF puede ayudar a agilizar el proceso. Si bien hay muchas herramientas gratuitas disponibles en línea, su necesidad de que cargue imágenes puede ser un problema de privacidad o seguridad.

En su lugar, puede crear un convertidor de imagen a PDF sin conexión utilizando Python. Seleccione varias imágenes en formato JPG o PNG, obtenga una vista previa y conviértalas en PDF manteniendo el tamaño de imagen original.

Módulo Tkinter, Pillow y ReportLab

Tkinter es la biblioteca GUI estándar para Python. Ofrece una variedad de widgets como botones, etiquetas y cuadros de texto que facilitan el desarrollo de aplicaciones como un reproductor de música o una herramienta de conversión de peso. Para instalar Tkinter en su sistema, abra una terminal y escriba:

instagram viewer
pip install tkinter

El módulo Pillow es una poderosa biblioteca de imágenes de Python que facilita la realización de operaciones en imágenes, como cambiar el tamaño, recortar y filtrar. Integrando esto con OpenAI API y DALL·E 2, puede generar imágenes usando un indicador de texto.

Para instalar Pillow, ejecute este comando:

pip install Pillow

ReportLab es una biblioteca Python de código abierto para generar archivos PDF y gráficos. Tiene varias herramientas que puede usar para generar documentos con imágenes, texto y tablas, lo que lo hace útil para generar informes a través de la programación. Con esto, puede crear informes comerciales, facturas y certificados al mismo tiempo que agregar una marca de agua de texto. Para instalar ReportLab:

pip install reportlab

Definir la estructura del convertidor de imagen a PDF

Puede encontrar el código fuente completo para construir el convertidor de imagen a PDF usando Python en este repositorio GitHub.

Importa los módulos necesarios y crea una clase llamada Convertidor de imagen a PDF. Defina un método constructor que inicialice la clase y tome el objeto de la ventana raíz de Tkinter como argumento. Inicialice una lista vacía para almacenar las rutas de las imágenes que seleccione el usuario. Establezca el título y las dimensiones de la aplicación. Crea dos botones llamados Seleccionar imágenes y Convertir a PDF.

Pase la ventana en la que desea colocar el botón, el texto que deben mostrar, el comando que deben ejecutar al hacer clic y el formato de fuente que deben aplicar. Organice los botones usando el embalar() método y darles un relleno de 10 en la dirección vertical.

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)

Defina una etiqueta pasándole la ventana principal para colocarla, el texto que debe mostrar, el formato de fuente que debe usar y un relleno vertical de 10 (píxeles).

Del mismo modo, defina un marco para obtener una vista previa de la imagen seleccionada y establezca su ventana principal, ancho y alto. Organízalo con un relleno 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)

Selección de la imagen y creación de una vista previa

Definir un método, seleccionar_imágenes(). Usa los de Tkinter archivo de diálogo clase para abrir un cuadro de diálogo para seleccionar varias imágenes y almacenarlas en el ruta_imágenes lista. Pase el directorio inicial que debe abrir el cuadro de diálogo, el título que debe mostrar y los tipos de archivo que permite seleccionar.

Defina un bucle que itere sobre todas las rutas de las imágenes seleccionadas por el usuario. Usar almohadas abierto() para abrir el archivo de imagen y pasar la dimensión máxima que debe poseer al método de cambio de tamaño. Convierta esta imagen PIL a FotoImagen que es compatible con Tkinter. Cree una etiqueta que resida en el marco de vista previa que creó anteriormente y muestre la imagen. Utilizar el red administrador para organizar las imágenes en un diseño de cuadrícula con tres columnas.

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)

Definir un método, cambiar el tamaño de la imagen() que cambia el tamaño de la imagen teniendo en cuenta la dimensión de la imagen y la dimensión máxima que definió anteriormente. Calcule la relación de aspecto y utilícela para establecer el nuevo ancho y alto. Utilice el método de cambio de tamaño de PIL para cambiar el tamaño de la imagen manteniendo intacta la relación de aspecto. Utilice la interpolación bilineal como remuestreo para obtener un resultado más suave.

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

Convertir las imágenes en PDF

Definir una función, convertir a PDF(). Utilice el cuadro de diálogo de archivo para solicitar la ruta de destino del PDF. Establezca la extensión predeterminada y el tipo de archivo como .pdf. Utilice el módulo de lienzo de ReportLab para dibujar una página horizontal. Repita la ruta de las imágenes, ábralas, establezca las dimensiones de la página del PDF de la misma manera que las de la imagen y dibuje la imagen desde la esquina superior izquierda con las dimensiones especificadas.

El Mostrar página () El método permite que el PDF se mueva a la página siguiente. Una vez que el programa complete este proceso, guarde el PDF y muestre un cuadro de mensaje junto con la ruta.

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

Cree la ventana raíz de Tkinter y pásela a la instancia de la clase. El bucle principal() La función le dice a Python que ejecute el ciclo de eventos de Tkinter y escuche los eventos hasta que cierre la ventana.

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

Reúna todo el código y el convertidor de imagen a PDF estará listo para usar.

Ejemplo de salida de la conversión de imágenes a PDF usando Python

Al ejecutar la aplicación, verá una ventana con dos botones y un espacio en blanco que le indicará que seleccione las imágenes.

Al hacer clic en el Seleccionar imágenes botón, aparece una ventana que le pide que elija las imágenes. Puede seleccionar cualquier número de imágenes en cualquier combinación.

Una vez que haya seleccionado las imágenes deseadas, verá una vista previa de ellas:

Al hacer clic en el botón Convertir a PDF, puede seleccionar el nombre y la ruta donde desea almacenar el archivo PDF. Una vez que el programa finaliza la conversión, muestra un cuadro de mensaje que dice que ha guardado el PDF seguido del nombre de la ruta. Al abrir el PDF, encontrará que el programa ha convertido las imágenes sin cambiar sus dimensiones.

Operaciones de PDF que puede implementar para mejorar sus aplicaciones

Puede crear una aplicación PDF completa que realice operaciones como fusionar, comprimir, proteger y desbloquear PDF. Puede crear una función para dividir el PDF en varias páginas, rotarlas, eliminar páginas particulares, ordenarlas y agregar páginas números.

También puede experimentar con otros formatos de archivo para convertir un documento o una presentación en PDF. Varios módulos, como PyPDF2, PDFMiner, fpdf y pdfrw, pueden ayudarlo a lograrlos de manera más conveniente.