rishav000 commited on
Commit
d77157b
Β·
verified Β·
1 Parent(s): 56c75ad

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +21 -32
src/streamlit_app.py CHANGED
@@ -1,55 +1,44 @@
1
  import streamlit as st
2
  import tempfile
 
3
  import os
4
- from nbconvert import HTMLExporter
5
- from nbformat import read, NO_CONVERT
6
- from weasyprint import HTML
7
 
8
- st.set_page_config(page_title="Colab Notebook β†’ PDF", page_icon="πŸ“˜", layout="centered")
9
 
10
- st.title("πŸ“˜ Convert Jupyter / Colab Notebook to PDF")
11
 
12
- st.write(
13
- "Upload your `.ipynb` file below and instantly download it as a **clean, readable PDF** β€” no LaTeX or setup needed!"
14
- )
15
 
16
- uploaded_file = st.file_uploader("Upload Notebook (.ipynb)", type=["ipynb"])
17
 
18
  if uploaded_file is not None:
19
  with tempfile.NamedTemporaryFile(delete=False, suffix=".ipynb") as tmp:
20
  tmp.write(uploaded_file.read())
21
  tmp_path = tmp.name
22
 
23
- try:
24
- # Convert to HTML using nbconvert (no LaTeX)
25
- html_exporter = HTMLExporter()
26
- html_exporter.exclude_input_prompt = True
27
- html_exporter.exclude_output_prompt = True
28
- html_exporter.template_name = "lab" # cleaner modern layout
29
-
30
- with open(tmp_path, "r", encoding="utf-8") as f:
31
- notebook_node = read(f, as_version=NO_CONVERT)
32
-
33
- body, _ = html_exporter.from_notebook_node(notebook_node)
34
 
35
- html_path = tmp_path.replace(".ipynb", ".html")
36
- pdf_path = tmp_path.replace(".ipynb", ".pdf")
37
-
38
- with open(html_path, "w", encoding="utf-8") as f:
39
- f.write(body)
 
 
 
40
 
41
- # Convert HTML β†’ PDF
42
- HTML(html_path).write_pdf(pdf_path)
43
 
44
- with open(pdf_path, "rb") as f:
45
  st.download_button(
46
  label="⬇️ Download PDF",
47
  data=f,
48
- file_name="notebook.pdf",
49
  mime="application/pdf",
50
  )
51
 
52
- st.success("βœ… Notebook successfully converted to PDF!")
53
 
54
- except Exception as e:
55
- st.error(f"❌ Conversion failed: {e}")
 
 
1
  import streamlit as st
2
  import tempfile
3
+ import subprocess
4
  import os
 
 
 
5
 
6
+ st.set_page_config(page_title="Colab Notebook β†’ PDF", page_icon="πŸ“˜")
7
 
8
+ st.title("πŸ“˜ Colab Notebook β†’ PDF Converter (LaTeX-based)")
9
 
10
+ st.write("Upload your `.ipynb` notebook below to convert it to a PDF using LaTeX (nbconvert).")
 
 
11
 
12
+ uploaded_file = st.file_uploader("Upload your notebook", type=["ipynb"])
13
 
14
  if uploaded_file is not None:
15
  with tempfile.NamedTemporaryFile(delete=False, suffix=".ipynb") as tmp:
16
  tmp.write(uploaded_file.read())
17
  tmp_path = tmp.name
18
 
19
+ st.info("🧩 Converting notebook to PDF... Please wait (1–2 min).")
 
 
 
 
 
 
 
 
 
 
20
 
21
+ try:
22
+ # Run nbconvert (LaTeX-based PDF export)
23
+ subprocess.run(
24
+ ["jupyter", "nbconvert", "--to", "pdf", tmp_path],
25
+ check=True,
26
+ stdout=subprocess.PIPE,
27
+ stderr=subprocess.PIPE,
28
+ )
29
 
30
+ pdf_file = tmp_path.replace(".ipynb", ".pdf")
 
31
 
32
+ with open(pdf_file, "rb") as f:
33
  st.download_button(
34
  label="⬇️ Download PDF",
35
  data=f,
36
+ file_name="converted_notebook.pdf",
37
  mime="application/pdf",
38
  )
39
 
40
+ st.success("βœ… Conversion successful!")
41
 
42
+ except subprocess.CalledProcessError as e:
43
+ st.error("❌ Conversion failed.")
44
+ st.exception(e)