Spaces:
Sleeping
Sleeping
| import os | |
| import gradio as gr | |
| import cairosvg | |
| import datetime | |
| import tempfile | |
| # 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): | |
| 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\n") | |
| # Function to convert PDF to SVG using cairosvg | |
| def convert_pdf_to_svg(input_pdf, output_svg, width, height): | |
| try: | |
| # Use cairosvg to convert the PDF to SVG | |
| cairosvg.svg2pdf(url=input_pdf, write_to=output_svg) | |
| return True | |
| except Exception as e: | |
| print(f"Error converting PDF to SVG: {e}") | |
| return False | |
| # Gradio interface function | |
| def process_pdf(uploaded_file, width, height): | |
| try: | |
| # Save uploaded file | |
| input_pdf = os.path.join(INPUT_FOLDER, "uploaded_file.pdf") | |
| with open(input_pdf, "wb") as f: | |
| f.write(uploaded_file.read()) | |
| # Step 1: Convert PDF to SVG | |
| if convert_pdf_to_svg(input_pdf, SVG_OUTPUT, width, height): | |
| # Step 2: Convert SVG to PDF (assuming `convert_svg_to_pdf` exists) | |
| convert_svg_to_pdf(SVG_OUTPUT, PDF_OUTPUT) | |
| # Step 3: Log the process | |
| log_conversion("Success", input_pdf, SVG_OUTPUT, PDF_OUTPUT) | |
| # Return output files for download | |
| return (SVG_OUTPUT, PDF_OUTPUT) | |
| else: | |
| return "Error converting PDF to SVG." | |
| except Exception as e: | |
| log_conversion("Failed", input_pdf, SVG_OUTPUT, PDF_OUTPUT) | |
| return str(e) | |
| # Gradio interface setup (only Width and Height) | |
| inputs = [ | |
| gr.File(label="Upload your PDF file", type="filepath"), | |
| gr.Number(value=8.0, label="Width (in inches)", precision=1), # Width input in inches | |
| gr.Number(value=11.0, label="Height (in inches)", precision=1) # Height input in inches | |
| ] | |
| outputs = [ | |
| gr.File(label="Download SVG", type="filepath"), | |
| gr.File(label="Download PDF", type="filepath") | |
| ] | |
| # Launch Gradio interface | |
| gr.Interface( | |
| fn=process_pdf, | |
| inputs=inputs, | |
| outputs=outputs, | |
| live=True, | |
| title="PDF to Editable SVG and PDF Converter", | |
| description="Upload a PDF to convert it to both an editable SVG and a PDF with transformations applied." | |
| ).launch() | |