Danial7's picture
Create app.py
5e756c1 verified
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.")