Advertisement
MizunoBrasil

Gera PDF

Apr 12th, 2025
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.19 KB | None | 0 0
  1. import os
  2. import tkinter as tk
  3. from tkinter import filedialog, messagebox, Menu
  4. from tkinter.scrolledtext import ScrolledText
  5. from reportlab.lib.pagesizes import letter
  6. from reportlab.pdfgen import canvas
  7. from threading import Thread
  8. from datetime import datetime
  9. import locale
  10.  
  11. # Configurar a localidade para português do Brasil
  12. locale.setlocale(locale.LC_TIME, "pt_BR.UTF-8")
  13.  
  14. # Função para gerar o PDF
  15. def gerar_pdf(texto, janela):
  16.     def tarefa():
  17.         try:
  18.             # Selecionar imagem
  19.             imagem_path = filedialog.askopenfilename(
  20.                 title="Selecione uma imagem",
  21.                 filetypes=[("Imagens", "*.jpg *.png")]
  22.             )
  23.  
  24.             if not imagem_path:
  25.                 return
  26.  
  27.             # Escolher nome do arquivo PDF
  28.             pdf_path = filedialog.asksaveasfilename(
  29.                 title="Salvar PDF como",
  30.                 defaultextension=".pdf",
  31.                 filetypes=[("Arquivo PDF", "*.pdf")]
  32.             )
  33.  
  34.             if not pdf_path:
  35.                 return
  36.  
  37.             # Gerar PDF
  38.             c = canvas.Canvas(pdf_path, pagesize=letter)
  39.  
  40.             # Página 1 - Texto
  41.             c.drawString(72, 720, "Descrição:")
  42.             text_object = c.beginText(72, 700)
  43.             text_object.setFont("Helvetica", 12)
  44.  
  45.             for line in texto.split("\n"):
  46.                 text_object.textLine(line)
  47.  
  48.             c.drawText(text_object)
  49.             c.showPage()
  50.  
  51.             # Página 2 - Imagem
  52.             from PIL import Image
  53.             img = Image.open(imagem_path)
  54.             img_width, img_height = img.size
  55.  
  56.             # Redimensionar imagem para caber na página
  57.             max_width = 550  # Aumentado para melhorar o tamanho da imagem
  58.             max_height = 750  # Aumentado para melhorar o tamanho da imagem
  59.             scale = min(max_width / img_width, max_height / img_height)
  60.  
  61.             new_width = int(img_width * scale)
  62.             new_height = int(img_height * scale)
  63.  
  64.             c.drawImage(imagem_path, (letter[0] - new_width) / 2, (letter[1] - new_height) / 2,
  65.                         width=new_width, height=new_height, preserveAspectRatio=True, mask='auto')
  66.             c.showPage()
  67.  
  68.             c.save()
  69.  
  70.             messagebox.showinfo("Sucesso", f"PDF gerado com sucesso: {pdf_path}")
  71.         except Exception as e:
  72.             messagebox.showerror("Erro", f"Ocorreu um erro ao gerar o PDF: {e}")
  73.  
  74.     Thread(target=tarefa).start()
  75.  
  76. # Função para preencher o texto no campo para Pagto Jacaraípe
  77. def preencher_texto(campo_texto):
  78.     data_atual = datetime.now().strftime("%d/%m/%Y")
  79.     mes_ano_atual = datetime.now().strftime("%B de %Y").capitalize()
  80.     exemplo_texto = (
  81.         "Pagamento de condomínio Edifício San Antônio, Jacaraípe, ES\n\n"
  82.         "Apartamento 304\n\n"
  83.         "Valor: R$150,34\n\n"
  84.         f"Mês e Ano: {mes_ano_atual}\n\n"
  85.         "Transferência realizada através de Pix\n\n"
  86.         "Foi informado ao síndico Valdemir através de WhatsApp que transferência foi feita.\n\n"
  87.         f"Data: {data_atual}"
  88.     )
  89.     campo_texto.delete("1.0", tk.END)
  90.     campo_texto.insert("1.0", exemplo_texto)
  91.  
  92. # Função para preencher o texto no campo para Pagto Bouganvillea
  93. def preencher_texto_bouganvillea(campo_texto):
  94.     data_atual = datetime.now().strftime("%d/%m/%Y")
  95.     mes_ano_atual = datetime.now().strftime("%B de %Y").capitalize()
  96.     exemplo_texto = (
  97.         "Pagamento de condomínio Shopping Bouganvillea, Belo Horizonte, MG\n\n"
  98.         "Loja 19\n\n"
  99.         "Data de vencimento: \n\n"
  100.         "Valor: \n\n"
  101.         f"Mês e Ano: {mes_ano_atual}\n\n"
  102.         "Pagamento feito através de boleto bancário em anexo.\n\n"
  103.         "Foi enviado através de WhatsApp o comprovante para a administradora\n\n"
  104.         "do condomínio (Mais Sindicos).\n\n"
  105.         f"Data: {data_atual}"
  106.     )
  107.     campo_texto.delete("1.0", tk.END)
  108.     campo_texto.insert("1.0", exemplo_texto)
  109.  
  110. # Função para exibir informações sobre o programa
  111. def exibir_sobre():
  112.     messagebox.showinfo("Sobre", "Versão 2.0. Data: 14/04/2025\nPor Mizuno")
  113.  
  114. # Função para sair do programa
  115. def sair_programa():
  116.     janela.destroy()
  117.  
  118. # Configuração da janela principal
  119. janela = tk.Tk()
  120. janela.title("Gerador de PDF")
  121. janela.geometry("600x400")
  122. janela.eval('tk::PlaceWindow . center')
  123.  
  124. # Menu
  125. menu_bar = Menu(janela)
  126. arquivo_menu = Menu(menu_bar, tearoff=0)
  127. arquivo_menu.add_command(label="Comprovante Pagto Jacaraípe", command=lambda: preencher_texto(campo_texto))
  128. arquivo_menu.add_command(label="Comprovante Pagto Bouganvillea", command=lambda: preencher_texto_bouganvillea(campo_texto))
  129. arquivo_menu.add_command(label="Sobre", command=exibir_sobre)
  130. arquivo_menu.add_command(label="Sair", command=sair_programa)
  131. menu_bar.add_cascade(label="Arquivo", menu=arquivo_menu)
  132. janela.config(menu=menu_bar)
  133.  
  134. # Campo de texto
  135. campo_texto = ScrolledText(janela, wrap=tk.WORD, height=15)
  136. campo_texto.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
  137.  
  138. # Botão de gerar PDF
  139. botao_gerar = tk.Button(janela, text="Gerar PDF", command=lambda: gerar_pdf(campo_texto.get("1.0", tk.END), janela))
  140. botao_gerar.pack(pady=10)
  141.  
  142. # Iniciar a aplicação
  143. janela.mainloop()
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement