Update app.py
Browse files
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
|
|
|
|
| 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 |
-
|
| 107 |
with gr.TabItem("Merge PDF"):
|
| 108 |
-
files = gr.Files(label="PDFs")
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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"):
|