shriarul5273 commited on
Commit
e64363d
·
verified ·
1 Parent(s): cafc4db

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +59 -0
  2. 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