Advertisement
MizunoBrasil

Gera PDF

Dec 11th, 2024
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.26 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
  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 exibir informações sobre o programa
  93. def exibir_sobre():
  94.     messagebox.showinfo("Sobre", "Versão 1.0. Data: 11/12/2024\nPor Mizuno")
  95.  
  96. # Função para sair do programa
  97. def sair_programa():
  98.     janela.destroy()
  99.  
  100. # Configuração da janela principal
  101. janela = tk.Tk()
  102. janela.title("Gerador de PDF")
  103. janela.geometry("600x400")
  104. janela.eval('tk::PlaceWindow . center')
  105.  
  106. # Menu
  107. menu_bar = Menu(janela)
  108. arquivo_menu = Menu(menu_bar, tearoff=0)
  109. arquivo_menu.add_command(label="Comprovante Pagto Jacaraípe", command=lambda: preencher_texto(campo_texto))
  110. arquivo_menu.add_command(label="Sobre", command=exibir_sobre)
  111. arquivo_menu.add_command(label="Sair", command=sair_programa)
  112. menu_bar.add_cascade(label="Arquivo", menu=arquivo_menu)
  113. janela.config(menu=menu_bar)
  114.  
  115. # Campo de texto
  116. campo_texto = ScrolledText(janela, wrap=tk.WORD, height=15)
  117. campo_texto.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
  118.  
  119. # Botão de gerar PDF
  120. botao_gerar = tk.Button(janela, text="Gerar PDF", command=lambda: gerar_pdf(campo_texto.get("1.0", tk.END), janela))
  121. botao_gerar.pack(pady=10)
  122.  
  123. # Iniciar a aplicação
  124. janela.mainloop()
  125.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement