Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import tkinter as tk
- from tkinter import filedialog, messagebox, Menu
- from tkinter.scrolledtext import ScrolledText
- from reportlab.lib.pagesizes import letter
- from reportlab.pdfgen import canvas
- from threading import Thread
- from datetime import datetime
- import locale
- # Configurar a localidade para português do Brasil
- locale.setlocale(locale.LC_TIME, "pt_BR.UTF-8")
- # Função para gerar o PDF
- def gerar_pdf(texto, janela):
- def tarefa():
- try:
- # Selecionar imagem
- imagem_path = filedialog.askopenfilename(
- title="Selecione uma imagem",
- filetypes=[("Imagens", "*.jpg *.png")]
- )
- if not imagem_path:
- return
- # Escolher nome do arquivo PDF
- pdf_path = filedialog.asksaveasfilename(
- title="Salvar PDF como",
- defaultextension=".pdf",
- filetypes=[("Arquivo PDF", "*.pdf")]
- )
- if not pdf_path:
- return
- # Gerar PDF
- c = canvas.Canvas(pdf_path, pagesize=letter)
- # Página 1 - Texto
- c.drawString(72, 720, "Descrição:")
- text_object = c.beginText(72, 700)
- text_object.setFont("Helvetica", 12)
- for line in texto.split("\n"):
- text_object.textLine(line)
- c.drawText(text_object)
- c.showPage()
- # Página 2 - Imagem
- from PIL import Image
- img = Image.open(imagem_path)
- img_width, img_height = img.size
- # Redimensionar imagem para caber na página
- max_width = 550 # Aumentado para melhorar o tamanho da imagem
- max_height = 750 # Aumentado para melhorar o tamanho da imagem
- scale = min(max_width / img_width, max_height / img_height)
- new_width = int(img_width * scale)
- new_height = int(img_height * scale)
- c.drawImage(imagem_path, (letter[0] - new_width) / 2, (letter[1] - new_height) / 2,
- width=new_width, height=new_height, preserveAspectRatio=True, mask='auto')
- c.showPage()
- c.save()
- messagebox.showinfo("Sucesso", f"PDF gerado com sucesso: {pdf_path}")
- except Exception as e:
- messagebox.showerror("Erro", f"Ocorreu um erro ao gerar o PDF: {e}")
- Thread(target=tarefa).start()
- # Função para preencher o texto no campo
- def preencher_texto(campo_texto):
- data_atual = datetime.now().strftime("%d/%m/%Y")
- mes_ano_atual = datetime.now().strftime("%B de %Y").capitalize()
- exemplo_texto = (
- "Pagamento de condomínio Edifício San Antônio, Jacaraípe, ES\n\n"
- "Apartamento 304\n\n"
- "Valor: R$150,34\n\n"
- f"Mês e Ano: {mes_ano_atual}\n\n"
- "Transferência realizada através de Pix\n\n"
- "Foi informado ao síndico Valdemir através de WhatsApp que transferência foi feita.\n\n"
- f"Data: {data_atual}"
- )
- campo_texto.delete("1.0", tk.END)
- campo_texto.insert("1.0", exemplo_texto)
- # Função para exibir informações sobre o programa
- def exibir_sobre():
- messagebox.showinfo("Sobre", "Versão 1.0. Data: 11/12/2024\nPor Mizuno")
- # Função para sair do programa
- def sair_programa():
- janela.destroy()
- # Configuração da janela principal
- janela = tk.Tk()
- janela.title("Gerador de PDF")
- janela.geometry("600x400")
- janela.eval('tk::PlaceWindow . center')
- # Menu
- menu_bar = Menu(janela)
- arquivo_menu = Menu(menu_bar, tearoff=0)
- arquivo_menu.add_command(label="Comprovante Pagto Jacaraípe", command=lambda: preencher_texto(campo_texto))
- arquivo_menu.add_command(label="Sobre", command=exibir_sobre)
- arquivo_menu.add_command(label="Sair", command=sair_programa)
- menu_bar.add_cascade(label="Arquivo", menu=arquivo_menu)
- janela.config(menu=menu_bar)
- # Campo de texto
- campo_texto = ScrolledText(janela, wrap=tk.WORD, height=15)
- campo_texto.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
- # Botão de gerar PDF
- botao_gerar = tk.Button(janela, text="Gerar PDF", command=lambda: gerar_pdf(campo_texto.get("1.0", tk.END), janela))
- botao_gerar.pack(pady=10)
- # Iniciar a aplicação
- janela.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement