Spaces:
Sleeping
Sleeping
File size: 4,817 Bytes
7303c86 2e9a542 7526462 61fd031 2e9a542 7303c86 2e9a542 7303c86 2e9a542 7303c86 7ab898a 2e9a542 7303c86 2e9a542 7303c86 2e9a542 7ab898a 2e9a542 7303c86 7ab898a 7303c86 7ab898a 2e9a542 7303c86 7526462 7303c86 7ab898a 61fd031 7ab898a 61fd031 7ab898a 61fd031 7ab898a 2e9a542 7ab898a 7303c86 7ab898a 7303c86 7ab898a 7303c86 2e9a542 7ab898a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | # app.py
import streamlit as st
from PyPDF2 import PdfReader, PdfWriter
from pdf2image import convert_from_path
from ocrmypdf import ocr
from PIL import Image
from reportlab.pdfgen import canvas
from io import BytesIO
import os
from docx import Document
from pptx import Presentation
from openpyxl import load_workbook
st.title("Comprehensive PDF Tools App")
st.sidebar.header("Choose an Operation")
# List of all operations
operations = [
"Merge PDF", "Split PDF", "Remove Pages", "Extract Pages", "Organize PDF",
"Scan to PDF", "Optimize PDF", "Compress PDF", "Repair PDF", "JPG to PDF",
"WORD to PDF", "POWERPOINT to PDF", "EXCEL to PDF", "HTML to PDF",
"PDF to JPG", "PDF to WORD", "PDF to POWERPOINT", "PDF to EXCEL",
"PDF to PDF/A", "Rotate PDF", "Add Page Numbers", "Add Watermark"
]
operation = st.sidebar.selectbox("Select Operation", operations)
uploaded_files = st.file_uploader("Upload File(s)", accept_multiple_files=True, type=["pdf", "jpg", "png", "docx", "pptx", "xlsx", "html"])
output = BytesIO()
# Functionality Definitions
def merge_pdfs(files):
writer = PdfWriter()
for file in files:
reader = PdfReader(file)
for page in reader.pages:
writer.add_page(page)
output = BytesIO()
writer.write(output)
output.seek(0)
return output
def split_pdf(file):
reader = PdfReader(file)
for i, page in enumerate(reader.pages):
writer = PdfWriter()
writer.add_page(page)
split_output = BytesIO()
writer.write(split_output)
split_output.seek(0)
st.download_button(f"Download Page {i+1}", split_output, file_name=f"page_{i+1}.pdf")
def remove_pages(file, pages_to_remove):
reader = PdfReader(file)
writer = PdfWriter()
for i, page in enumerate(reader.pages):
if i not in pages_to_remove:
writer.add_page(page)
writer.write(output)
output.seek(0)
return output
def extract_pages(file, pages_to_extract):
reader = PdfReader(file)
writer = PdfWriter()
for i in pages_to_extract:
writer.add_page(reader.pages[i])
writer.write(output)
output.seek(0)
return output
def jpg_to_pdf(files):
images = [Image.open(file).convert("RGB") for file in files]
pdf_output = BytesIO()
images[0].save(pdf_output, save_all=True, append_images=images[1:], format="PDF")
pdf_output.seek(0)
return pdf_output
def convert_docx_to_pdf(file):
doc = Document(file)
pdf_output = BytesIO()
c = canvas.Canvas(pdf_output)
for paragraph in doc.paragraphs:
c.drawString(100, 750, paragraph.text)
c.save()
pdf_output.seek(0)
return pdf_output
def rotate_pdf(file, rotation):
reader = PdfReader(file)
writer = PdfWriter()
for page in reader.pages:
page.rotate(rotation)
writer.add_page(page)
writer.write(output)
output.seek(0)
return output
def add_watermark(file, watermark_text):
reader = PdfReader(file)
writer = PdfWriter()
watermark_file = BytesIO()
c = canvas.Canvas(watermark_file)
c.drawString(100, 750, watermark_text)
c.save()
watermark_file.seek(0)
watermark_pdf = PdfReader(watermark_file)
watermark_page = watermark_pdf.pages[0]
for page in reader.pages:
page.merge_page(watermark_page)
writer.add_page(page)
writer.write(output)
output.seek(0)
return output
# Mapping Operations to Functions
if operation == "Merge PDF" and uploaded_files:
merged_pdf = merge_pdfs(uploaded_files)
st.download_button("Download Merged PDF", merged_pdf, file_name="merged.pdf")
elif operation == "Split PDF" and uploaded_files:
split_pdf(uploaded_files[0])
elif operation == "Remove Pages" and uploaded_files:
pages_to_remove = st.text_input("Enter page numbers to remove (comma-separated):")
if st.button("Remove Pages"):
pages = [int(x.strip()) - 1 for x in pages_to_remove.split(",")]
updated_pdf = remove_pages(uploaded_files[0], pages)
st.download_button("Download Updated PDF", updated_pdf, file_name="updated.pdf")
elif operation == "Rotate PDF" and uploaded_files:
rotation = st.slider("Select Rotation (degrees):", -180, 180, 90)
rotated_pdf = rotate_pdf(uploaded_files[0], rotation)
st.download_button("Download Rotated PDF", rotated_pdf, file_name="rotated.pdf")
elif operation == "Add Watermark" and uploaded_files:
watermark_text = st.text_input("Enter Watermark Text:")
if st.button("Add Watermark"):
watermarked_pdf = add_watermark(uploaded_files[0], watermark_text)
st.download_button("Download Watermarked PDF", watermarked_pdf, file_name="watermarked.pdf")
# Add other operations similarly
else:
st.write("Please select an operation and upload the required file(s).")
|