Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from io import BytesIO | |
| from docx import Document | |
| from pptx import Presentation | |
| import pandas as pd | |
| from fpdf import FPDF | |
| st.title("π Office to PDF Converter") | |
| uploaded_file = st.file_uploader("Upload a .docx, .xlsx, or .pptx file", type=["docx", "xlsx", "pptx"]) | |
| def convert_docx_to_pdf(file): | |
| doc = Document(file) | |
| pdf = FPDF() | |
| pdf.add_page() | |
| pdf.set_auto_page_break(auto=True, margin=15) | |
| pdf.set_font("Arial", size=12) | |
| for para in doc.paragraphs: | |
| pdf.multi_cell(0, 10, para.text) | |
| return pdf.output(dest='S').encode('latin1') | |
| def convert_xlsx_to_pdf(file): | |
| df = pd.read_excel(file) | |
| pdf = FPDF() | |
| pdf.add_page() | |
| pdf.set_font("Arial", size=10) | |
| col_width = pdf.w / (len(df.columns) + 1) | |
| row_height = 8 | |
| for col in df.columns: | |
| pdf.cell(col_width, row_height, col, border=1) | |
| pdf.ln(row_height) | |
| for _, row in df.iterrows(): | |
| for item in row: | |
| pdf.cell(col_width, row_height, str(item), border=1) | |
| pdf.ln(row_height) | |
| return pdf.output(dest='S').encode('latin1') | |
| def convert_pptx_to_pdf(file): | |
| prs = Presentation(file) | |
| pdf = FPDF() | |
| pdf.set_font("Arial", size=14) | |
| for slide in prs.slides: | |
| pdf.add_page() | |
| for shape in slide.shapes: | |
| if hasattr(shape, "text"): | |
| pdf.multi_cell(0, 10, shape.text) | |
| return pdf.output(dest='S').encode('latin1') | |
| if uploaded_file: | |
| file_type = uploaded_file.name.split('.')[-1] | |
| pdf_bytes = None | |
| if file_type == 'docx': | |
| pdf_bytes = convert_docx_to_pdf(uploaded_file) | |
| elif file_type == 'xlsx': | |
| pdf_bytes = convert_xlsx_to_pdf(uploaded_file) | |
| elif file_type == 'pptx': | |
| pdf_bytes = convert_pptx_to_pdf(uploaded_file) | |
| if pdf_bytes: | |
| st.success("β Conversion successful!") | |
| st.download_button("π₯ Download PDF", data=pdf_bytes, file_name="converted.pdf", mime="application/pdf") | |
| else: | |
| st.error("β Unsupported file type or conversion failed.") | |