| | from pywebio import start_server |
| | from pywebio.input import input |
| | from pywebio.output import ( |
| | put_text, put_success, put_error, put_file, |
| | put_markdown, put_buttons |
| | ) |
| |
|
| | import requests, os, shutil, uuid, subprocess, threading, time, re |
| | from urllib.parse import urlparse, unquote |
| |
|
| | |
| | PING_URL = "https://sanch1tx-onedrive.hf.space" |
| | def auto_pinger(): |
| | while True: |
| | try: |
| | requests.get(PING_URL, timeout=10) |
| | except: |
| | pass |
| | time.sleep(300) |
| |
|
| | threading.Thread(target=auto_pinger, daemon=True).start() |
| |
|
| | |
| | def extract_filename(response, fallback_url): |
| | cd = response.headers.get("content-disposition") |
| | if cd: |
| | m = re.search(r'filename="?([^"]+)"?', cd) |
| | if m: |
| | return m.group(1) |
| | path = urlparse(fallback_url).path |
| | name = os.path.basename(path) |
| | return unquote(name) if name else "document.docx" |
| |
|
| | |
| | def download_file_from_onedrive(shared_url, workdir): |
| | dl = shared_url + ("&download=1" if "?" in shared_url else "?download=1") |
| | r = requests.get(dl, stream=True) |
| | r.raise_for_status() |
| | filename = extract_filename(r, shared_url) |
| | if not filename.lower().endswith(".docx"): |
| | filename += ".docx" |
| | path = os.path.join(workdir, filename) |
| | with open(path, "wb") as f: |
| | for chunk in r.iter_content(8192): |
| | if chunk: |
| | f.write(chunk) |
| | return path, filename |
| |
|
| | |
| | def convert_docx_to_pdf(docx_path, workdir): |
| | cmd = [ |
| | "soffice", |
| | "--headless", |
| | "--convert-to", "pdf:writer_pdf_Export", |
| | docx_path, |
| | "--outdir", workdir |
| | ] |
| | subprocess.run(cmd, check=True) |
| | name_pdf = os.path.basename(docx_path).replace(".docx", ".pdf") |
| | return os.path.join(workdir, name_pdf), name_pdf |
| |
|
| | |
| | def app(): |
| | put_markdown("## OneDrive DOCX → PDF Converter (LibreOffice)") |
| |
|
| | url = input("Paste OneDrive DOCX link") |
| | workdir = f"temp_{uuid.uuid4()}" |
| | os.makedirs(workdir, exist_ok=True) |
| |
|
| | try: |
| | put_text("Downloading file…") |
| | docx_path, docx_name = download_file_from_onedrive(url, workdir) |
| | put_success(f"Downloaded: {docx_name}") |
| |
|
| | put_text("Converting to PDF…") |
| | pdf_path, pdf_name = convert_docx_to_pdf(docx_path, workdir) |
| |
|
| | def download_click(btn_val): |
| | with open(pdf_path, "rb") as f: |
| | put_file(pdf_name, f.read()) |
| |
|
| | put_buttons(["Download PDF"], onclick=download_click) |
| | put_success("PDF ready! Click the button above.") |
| |
|
| | except Exception as e: |
| | put_error(str(e)) |
| |
|
| | finally: |
| | |
| | def cleanup(): |
| | time.sleep(30) |
| | shutil.rmtree(workdir, ignore_errors=True) |
| | threading.Thread(target=cleanup, daemon=True).start() |
| |
|
| | put_markdown("---") |
| | put_markdown( |
| | "<center><small>Developed by: <b>Sanchit Vishwakarma</b></small></center>", |
| | sanitize=False |
| | ) |
| |
|
| | if __name__ == "__main__": |
| | start_server(app, host="0.0.0.0", port=7860) |