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).")