plozia commited on
Commit
61881cd
·
verified ·
1 Parent(s): 1e1e9cf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -9
app.py CHANGED
@@ -3,7 +3,7 @@ import tempfile
3
  from typing import List
4
  import gradio as gr
5
  from PyPDF2 import PdfReader, PdfWriter
6
- import pikepdf
7
 
8
  # Load custom CSS
9
  with open(os.path.join(os.path.dirname(__file__), "fancy.css")) as f:
@@ -98,19 +98,34 @@ with gr.Blocks(css=custom_css) as demo:
98
  with gr.Tabs():
99
  # Split
100
  with gr.TabItem("Split PDF"):
101
- inp, ranges = gr.File(label="PDF"), gr.Textbox(label="Ranges")
 
102
  btn = gr.Button("Split")
103
  out, err = gr.File(), gr.Textbox(visible=False)
104
  btn.click(lambda f,r: (*split_pdf(f,r),), [inp,ranges],[out,err,err])
105
 
106
- # Merge
107
  with gr.TabItem("Merge PDF"):
108
- files = gr.Files(label="PDFs")
109
- order_df = gr.Dataframe(headers=["Filename","Order"], interactive=True)
110
- files.change(lambda fs: [[os.path.basename(f.name), i+1] for i,f in enumerate(fs)], inputs=files, outputs=order_df)
111
- btn_m = gr.Button("Merge")
112
- out_m, err_m = gr.File(), gr.Textbox(visible=False)
113
- btn_m.click(lambda fs,df: merge_pdfs(fs,[int(r[1]) for r in df] if df else None), [files,order_df], [out_m,err_m,err_m])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
  # Compress
116
  with gr.TabItem("Compress PDF"):
 
3
  from typing import List
4
  import gradio as gr
5
  from PyPDF2 import PdfReader, PdfWriter
6
+ import pikepdf # for advanced compression
7
 
8
  # Load custom CSS
9
  with open(os.path.join(os.path.dirname(__file__), "fancy.css")) as f:
 
98
  with gr.Tabs():
99
  # Split
100
  with gr.TabItem("Split PDF"):
101
+ inp = gr.File(label="PDF")
102
+ ranges = gr.Textbox(label="Page ranges", placeholder="e.g. 1-3,6-8")
103
  btn = gr.Button("Split")
104
  out, err = gr.File(), gr.Textbox(visible=False)
105
  btn.click(lambda f,r: (*split_pdf(f,r),), [inp,ranges],[out,err,err])
106
 
107
+ # Merge
108
  with gr.TabItem("Merge PDF"):
109
+ files = gr.Files(label="Upload PDFs to merge (max 1 GB each)")
110
+ reorder = gr.Sortable([], label="Drag to reorder files by filename")
111
+
112
+ def update_reorder(file_list):
113
+ return [os.path.basename(f.name) for f in file_list] if file_list else []
114
+ files.change(update_reorder, inputs=files, outputs=reorder)
115
+
116
+ btn_m = gr.Button("Merge PDFs", variant="primary")
117
+ out_m = gr.File(label="Download Merged PDF")
118
+ err_m = gr.Textbox(label="Error", interactive=False, visible=False)
119
+
120
+ def run_merge(file_list, order_list):
121
+ if not file_list or len(file_list) < 2:
122
+ return None, "Please upload at least two PDFs.", True
123
+ name_to_file = {os.path.basename(f.name): f for f in file_list}
124
+ ordered_files = [name_to_file[name] for name in order_list if name in name_to_file]
125
+ out, err = merge_pdfs(ordered_files)
126
+ return out, err, err is not None
127
+
128
+ btn_m.click(run_merge, [files, reorder], [out_m, err_m, err_m])
129
 
130
  # Compress
131
  with gr.TabItem("Compress PDF"):