SathvikGanta's picture
Update app.py
aea88e6 verified
import os
import gradio as gr
from pdf_to_svg import convert_pdf_to_svg
from svg_to_pdf import convert_svg_to_pdf
import datetime
# Folder paths
INPUT_FOLDER = "./input/"
OUTPUT_FOLDER = "./output/"
LOG_FOLDER = "./logs/"
SVG_OUTPUT = os.path.join(OUTPUT_FOLDER, "processed_diagram.svg")
PDF_OUTPUT = os.path.join(OUTPUT_FOLDER, "processed_diagram.pdf")
# Ensure required folders exist
os.makedirs(INPUT_FOLDER, exist_ok=True)
os.makedirs(OUTPUT_FOLDER, exist_ok=True)
os.makedirs(LOG_FOLDER, exist_ok=True)
# Function to log conversion steps
def log_conversion(status, input_pdf, output_svg, output_pdf, error_message=None):
log_path = os.path.join(LOG_FOLDER, "conversion_log.txt")
with open(log_path, "a") as log_file:
log_file.write(f"{datetime.datetime.now()} - Status: {status}\n")
log_file.write(f"Input PDF: {input_pdf}\n")
log_file.write(f"Output SVG: {output_svg}\n")
log_file.write(f"Output PDF: {output_pdf}\n")
if error_message:
log_file.write(f"Error: {error_message}\n")
log_file.write("\n")
# Gradio interface function
def process_pdf(file, width, height):
try:
# Check if file is uploaded
if not file:
raise ValueError("No file uploaded.")
# Save the uploaded file to disk
input_pdf = os.path.join(INPUT_FOLDER, os.path.basename(file.name))
with open(input_pdf, "wb") as f:
f.write(file.read())
# Step 1: Convert PDF to SVG
convert_pdf_to_svg(input_pdf, SVG_OUTPUT, width, height)
# Step 2: Convert SVG to PDF
convert_svg_to_pdf(SVG_OUTPUT, PDF_OUTPUT)
# Step 3: Log the process
log_conversion("Success", input_pdf, SVG_OUTPUT, PDF_OUTPUT)
# Return paths to the output files for download
return SVG_OUTPUT, PDF_OUTPUT
except Exception as e:
# Log the error
log_conversion("Failed", "N/A", "N/A", "N/A", str(e))
# Raise an error to be shown in Gradio UI
return None, None
# Gradio interface
iface = gr.Interface(
fn=process_pdf,
inputs=[
gr.File(label="Upload your PDF file", file_types=[".pdf"]),
gr.Number(label="Width (in inches)", value=8.0, precision=1),
gr.Number(label="Height (in inches)", value=11.0, precision=1),
],
outputs=[
gr.File(label="Download SVG"),
gr.File(label="Download PDF"),
],
title="PDF to Editable SVG and PDF Converter",
description="Upload a PDF file, specify output dimensions (in inches), and convert it to editable SVG and PDF files.",
)
if __name__ == "__main__":
iface.launch(debug=True)