Spaces:
Sleeping
Sleeping
Upload 2 files
Browse files- app.py +59 -0
- requirements.txt +2 -0
app.py
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
from PyPDF2 import PdfReader, PdfWriter
|
3 |
+
import tempfile
|
4 |
+
import os
|
5 |
+
import atexit
|
6 |
+
|
7 |
+
def merge_pdfs(pdf_files, order):
|
8 |
+
pdf_writer = PdfWriter()
|
9 |
+
|
10 |
+
# Sort the PDF files based on the specified order
|
11 |
+
sorted_pdfs = [pdf for _, pdf in sorted(zip(order, pdf_files))]
|
12 |
+
|
13 |
+
# Read and add each PDF file to the writer in the specified order
|
14 |
+
for pdf in sorted_pdfs:
|
15 |
+
pdf_reader = PdfReader(pdf.name)
|
16 |
+
for page in pdf_reader.pages:
|
17 |
+
pdf_writer.add_page(page)
|
18 |
+
|
19 |
+
# Create a temporary file for the merged PDF
|
20 |
+
with tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as temp_file:
|
21 |
+
pdf_writer.write(temp_file)
|
22 |
+
temp_file_path = temp_file.name
|
23 |
+
|
24 |
+
return temp_file_path
|
25 |
+
|
26 |
+
# Create Gradio interface
|
27 |
+
with gr.Blocks() as demo:
|
28 |
+
gr.Markdown("# PDF Merger and Viewer")
|
29 |
+
pdf_input = gr.File(label="Upload PDF Files to Merge", file_types=[".pdf"], file_count="multiple")
|
30 |
+
order_input = gr.Textbox(label="Enter the order of PDFs (comma-separated numbers, e.g., 2,1,3)", placeholder="1,2,3,...")
|
31 |
+
merge_button = gr.Button("Merge PDFs")
|
32 |
+
merged_result = gr.File(label="Download Merged PDF")
|
33 |
+
|
34 |
+
# Set button action to merge PDFs and then display the first page
|
35 |
+
def merge_and_preview(pdf_files, order):
|
36 |
+
if not order:
|
37 |
+
order = list(range(1, len(pdf_files) + 1))
|
38 |
+
else:
|
39 |
+
order = [int(x.strip()) for x in order.split(',')]
|
40 |
+
|
41 |
+
if len(order) != len(pdf_files):
|
42 |
+
return gr.Error("The number of order values must match the number of uploaded PDFs.")
|
43 |
+
|
44 |
+
merged_pdf_path = merge_pdfs(pdf_files, order)
|
45 |
+
return merged_pdf_path
|
46 |
+
|
47 |
+
merge_button.click(merge_and_preview, inputs=[pdf_input, order_input], outputs=[merged_result])
|
48 |
+
|
49 |
+
# Launch the Gradio app
|
50 |
+
demo.launch()
|
51 |
+
|
52 |
+
# Clean up temporary files
|
53 |
+
def cleanup_temp_files():
|
54 |
+
temp_dir = tempfile.gettempdir()
|
55 |
+
for filename in os.listdir(temp_dir):
|
56 |
+
if filename.endswith('.pdf'):
|
57 |
+
os.remove(os.path.join(temp_dir, filename))
|
58 |
+
|
59 |
+
atexit.register(cleanup_temp_files)
|
requirements.txt
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
gradio
|
2 |
+
PyPDF2
|