datatoeditable / app.py
lokesh341's picture
Update app.py
5eb110a verified
import fitz # PyMuPDF
from PIL import Image
import easyocr
from fpdf import FPDF
import gradio as gr
# Initialize EasyOCR reader
reader = easyocr.Reader(['en']) # Specify the languages, e.g., 'en' for English
# Step 1: Convert PDF Pages to Images
def pdf_to_images(pdf_path):
pdf_document = fitz.open(pdf_path)
images = []
for page_num in range(len(pdf_document)):
page = pdf_document[page_num]
pix = page.get_pixmap() # Render the page as an image
image_path = f"page_{page_num + 1}.png"
pix.save(image_path)
images.append(image_path)
return images
# Step 2: Extract Text Using EasyOCR
def extract_text_easyocr(images):
text_pages = []
for image_path in images:
# Perform OCR on the image
text = reader.readtext(image_path, detail=0) # Extract text without bounding box details
text_pages.append("\n".join(text))
return text_pages
# Step 3: Create Editable PDF
def create_editable_pdf(text_pages, output_pdf_path):
pdf = FPDF()
pdf.set_auto_page_break(auto=True, margin=15)
for text in text_pages:
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.multi_cell(0, 10, text)
pdf.output(output_pdf_path)
# Main Function
def process_pdf(file):
input_pdf_path = file.name
output_pdf_path = "Editable_Output.pdf"
# Convert PDF to images and extract text
images = pdf_to_images(input_pdf_path)
text_pages = extract_text_easyocr(images)
# Create a new PDF with extracted text
create_editable_pdf(text_pages, output_pdf_path)
return output_pdf_path
# Gradio Interface
iface = gr.Interface(
fn=process_pdf,
inputs=gr.File(label="Upload PDF"),
outputs=gr.File(label="Download Editable PDF"),
title="OCR PDF to Editable Text",
description="Upload a PDF to extract and replace curved text with editable text.",
)
iface.launch(share=True)