Organize suas imagens em PDFs e aprenda a usar o Tkinter para construir este prático utilitário.

De relatórios de negócios a portfólios de fotografia, você frequentemente se deparará com a necessidade de usar imagens em PDFs. Um conversor de imagem para PDF pode ajudar a simplificar o processo. Embora existam muitas ferramentas gratuitas disponíveis on-line, a necessidade de fazer upload de imagens pode ser uma questão de privacidade ou segurança.

Em vez disso, você pode criar um conversor offline de imagem para PDF usando Python. Selecione várias imagens no formato JPG ou PNG, obtenha uma visualização e converta-as em PDF, mantendo o tamanho da imagem original.

Módulo Tkinter, Pillow e ReportLab

Tkinter é a biblioteca GUI padrão para Python. Ele oferece uma variedade de widgets como botões, rótulos e caixas de texto que facilitam o desenvolvimento de aplicativos como um reprodutor de música ou uma ferramenta de conversão de peso. Para instalar o Tkinter em seu sistema, abra um terminal e digite:

instagram viewer
pip install tkinter

O módulo Pillow é uma poderosa biblioteca de imagens Python que facilita a execução de operações em imagens, como redimensionamento, corte e filtragem. Integrando isso com API OpenAI e DALL·E 2, você pode gerar imagens usando um prompt de texto.

Para instalar o Pillow, execute este comando:

pip install Pillow

ReportLab é uma biblioteca Python de código aberto para gerar PDFs e gráficos. Possui várias ferramentas que você pode usar para gerar documentos com imagens, texto e tabelas, o que o torna útil para gerar relatórios via programação. Com isso, você pode criar relatórios comerciais, faturas e certificados enquanto também adicionando uma marca d'água de texto. Para instalar o ReportLab:

pip install reportlab

Defina a estrutura do conversor de imagem para PDF

Você pode encontrar todo o código-fonte para construir o conversor de imagem para PDF usando Python neste Repositório GitHub.

Importe os módulos necessários e crie uma classe chamada ImageToPDFConverter. Defina um método construtor que inicialize a classe e tome o objeto da janela raiz do Tkinter como um argumento. Inicialize uma lista vazia para armazenar os caminhos das imagens selecionadas pelo usuário. Defina o título e as dimensões do aplicativo. Crie dois botões chamados Selecionar imagens e Converter para PDF.

Passe a janela na qual deseja colocar o botão, o texto que deve exibir, o comando que deve executar ao clicar e o formato da fonte que deve aplicar. Organize os botões usando o pacote() e dê a eles um preenchimento de 10 na direção 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 um rótulo passando-o pela janela pai para colocá-lo, o texto que deve ser exibido, o formato da fonte que deve usar e um preenchimento vertical de 10 (pixels).

Da mesma forma, defina um quadro para visualizar a imagem selecionada e defina sua janela pai, largura e altura. Organize-o com um padding 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)

Selecionando a imagem e criando uma visualização

Defina um método, select_images(). Use o Tkinter diálogo de arquivo classe para abrir uma caixa de diálogo para selecionar várias imagens e armazená-las no caminho_imagens lista. Passe o diretório inicial que a caixa de diálogo deve abrir, o título que ela deve exibir e os tipos de arquivos que ela permite selecionar.

Defina um loop que percorra todos os caminhos das imagens selecionadas pelo usuário. Use travesseiros abrir() para abrir o arquivo de imagem e passar a dimensão máxima que ele deve possuir para o método resize. Converter esta imagem PIL para FotoImagem compatível com Tkinter. Crie um rótulo que resida no quadro de visualização criado anteriormente e exiba a imagem. Use o grade gerenciador para organizar as imagens em um layout de grade com três colunas.

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)

Defina um método, Redimensionar imagem() que redimensiona a imagem tendo em conta a dimensão da imagem e a dimensão máxima que definiu anteriormente. Calcule a proporção e use-a para definir a nova largura e altura. Use o método de redimensionamento do PIL para redimensionar a imagem mantendo a proporção intacta. Use a interpolação bilinear como reamostragem para um resultado mais 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

Convertendo as imagens em PDF

Defina uma função, converter_para_pdf(). Use a caixa de diálogo de arquivo para solicitar o caminho de destino do PDF. Defina a extensão padrão e o tipo de arquivo como .pdf. Use o módulo de tela do ReportLab para desenhar uma página de paisagem. Repita o caminho das imagens, abra-as, defina as dimensões da página do PDF iguais às da imagem e desenhe a imagem do canto superior esquerdo com as dimensões especificadas.

O mostrarPágina() O método permite que o PDF vá para a próxima página. Depois que o programa concluir esse processo, salve o PDF e mostre uma caixa de mensagem junto com o caminho.

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

Crie a janela raiz do Tkinter e passe-a para a instância da classe. O circuito principal() A função diz ao Python para executar o loop de eventos Tkinter e escutar os eventos até que você feche a janela.

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

Junte todo o código e o conversor de imagem para PDF está pronto para uso.

Exemplo de saída de conversão de imagens em PDF usando Python

Ao executar o aplicativo, você verá uma janela com dois botões e um espaço em branco instruindo você a selecionar as imagens.

Ao clicar no Selecionar imagens botão, uma janela aparece pedindo para você escolher as imagens. Você pode selecionar qualquer número de imagens em qualquer combinação.

Depois de selecionar as imagens desejadas, você verá uma prévia delas:

Ao clicar no botão Converter para PDF, você pode selecionar o nome e o caminho onde deseja armazenar o arquivo PDF. Assim que o programa terminar a conversão, ele exibirá uma caixa de mensagem informando que salvou o PDF seguido do nome do caminho. Ao abrir o PDF, você descobrirá que o programa converteu as imagens sem alterar suas dimensões.

Operações de PDF que você pode implementar para aprimorar seus aplicativos

Você pode criar um aplicativo PDF completo que execute operações como mesclar, compactar, proteger e desbloquear PDF. Você pode criar um recurso para dividir o PDF em várias páginas, girá-las, remover páginas específicas, classificá-las e adicionar páginas números.

Você também pode experimentar outros formatos de arquivo para converter um documento ou uma apresentação em PDF. Vários módulos, como PyPDF2, PDFMiner, fpdf e pdfrw, podem ajudá-lo a alcançá-los de forma mais conveniente.