import fitz # PyMuPDF
from googletrans import Translator
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
import tkinter as tk
from tkinter import filedialog, simpledialog, messagebox
def extract_text_from_pdf(pdf_path):
doc = fitz.open(pdf_path)
full_text = ""
for page in doc:
full_text += page.get_text()
doc.close()
return full_text
def translate_text(text, dest_lang='fr'):
translator = Translator()
try:
translated = translator.translate(text, dest=dest_lang)
return translated.text
except Exception as e:
print("Translation error:", e)
return None
def save_text_as_pdf(text, output_path):
c = canvas.Canvas(output_path, pagesize=A4)
width, height = A4
lines = text.split('\n')
y = height - 40
for line in lines:
if y < 40: # new page
c.showPage()
y = height - 40
c.drawString(40, y, line)
y -= 15
c.save()
def run_translator():
pdf_path = filedialog.askopenfilename(title="Select PDF", filetypes=[("PDF files", "*.pdf")])
if not pdf_path:
return
lang_code = simpledialog.askstring("Language Code", "Enter target language code (e.g., 'es' for Spanish, 'de' for German):")
if not lang_code:
return
try:
extracted_text = extract_text_from_pdf(pdf_path)
messagebox.showinfo("Info", "Text extracted. Translating...")
translated_text = translate_text(extracted_text, dest_lang=lang_code)
if not translated_text:
messagebox.showerror("Error", "Translation failed.")
return
save_path = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=[("PDF files", "*.pdf")])
if not save_path:
return
save_text_as_pdf(translated_text, save_path)
messagebox.showinfo("Success", f"Translated PDF saved at:\n{save_path}")
except Exception as e:
messagebox.showerror("Error", str(e))
# GUI
root = tk.Tk()
root.title(" PDF Translator")
root.geometry("400x200")
label = tk.Label(root, text="PDF Translator", font=("Arial", 16))
label.pack(pady=20)
translate_btn = tk.Button(root, text="Select and Translate PDF", command=run_translator, bg="#007BFF", fg="white", font=("Arial", 12))
translate_btn.pack(pady=10)
root.mainloop()