PDFSplitter / app.py
Vishwas1's picture
Create app.py
b11e20a verified
raw
history blame contribute delete
No virus
2.2 kB
import os
import gradio as gr
from PyPDF2 import PdfWriter, PdfReader
def split_pdf(input_file, pages_per_split):
# Open the input PDF file
with open(input_file.name, 'rb') as file:
# Create a PDF reader object
pdf_reader = PdfReader(file)
# Get the total number of pages in the PDF
total_pages = len(pdf_reader.pages)
# Calculate the number of splits
num_splits = (total_pages + pages_per_split - 1) // pages_per_split
# Create a directory to store the split PDF files
output_dir = 'split_pdfs'
os.makedirs(output_dir, exist_ok=True)
# List to store the paths of the split PDF files
split_files = []
# Iterate over the number of splits
for i in range(num_splits):
# Create a new PDF writer object for each split
pdf_writer = PdfWriter()
# Calculate the start and end page numbers for the current split
start_page = i * pages_per_split
end_page = min((i + 1) * pages_per_split, total_pages)
# Add the pages to the PDF writer object
for page in range(start_page, end_page):
pdf_writer.add_page(pdf_reader.pages[page])
# Generate the output file name for the current split
output_file = os.path.join(output_dir, f'split_{i+1}.pdf')
# Open the output file in write-binary mode
with open(output_file, 'wb') as output:
# Write the pages to the output file
pdf_writer.write(output)
# Add the path of the split PDF file to the list
split_files.append(output_file)
return split_files
# Gradio interface
def gradio_interface(input_file, pages_per_split):
split_files = split_pdf(input_file, pages_per_split)
return split_files
# Create a Gradio interface
iface = gr.Interface(
fn=gradio_interface,
inputs=[gr.File(label="Input PDF"), gr.Number(label="Pages per Split")],
outputs=gr.File(label="Split PDFs"),
title="PDF Splitter",
description="Split a large PDF file into smaller PDF files.",
)
# Launch the Gradio interface
iface.launch()