|
|
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 |
|
|
|
|
|
|
|
|
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") |
|
|
|
|
|
|
|
|
os.makedirs(INPUT_FOLDER, exist_ok=True) |
|
|
os.makedirs(OUTPUT_FOLDER, exist_ok=True) |
|
|
os.makedirs(LOG_FOLDER, exist_ok=True) |
|
|
|
|
|
|
|
|
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") |
|
|
|
|
|
|
|
|
def process_pdf(file, width, height): |
|
|
try: |
|
|
|
|
|
if not file: |
|
|
raise ValueError("No file uploaded.") |
|
|
|
|
|
|
|
|
input_pdf = os.path.join(INPUT_FOLDER, os.path.basename(file.name)) |
|
|
with open(input_pdf, "wb") as f: |
|
|
f.write(file.read()) |
|
|
|
|
|
|
|
|
convert_pdf_to_svg(input_pdf, SVG_OUTPUT, width, height) |
|
|
|
|
|
|
|
|
convert_svg_to_pdf(SVG_OUTPUT, PDF_OUTPUT) |
|
|
|
|
|
|
|
|
log_conversion("Success", input_pdf, SVG_OUTPUT, PDF_OUTPUT) |
|
|
|
|
|
|
|
|
return SVG_OUTPUT, PDF_OUTPUT |
|
|
except Exception as e: |
|
|
|
|
|
log_conversion("Failed", "N/A", "N/A", "N/A", str(e)) |
|
|
|
|
|
return None, None |
|
|
|
|
|
|
|
|
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) |
|
|
|