HawkeyeHS commited on
Commit
2713809
·
verified ·
1 Parent(s): dff2b65

Added functionality to remove pages from a PDF

Browse files
Files changed (1) hide show
  1. app.py +65 -2
app.py CHANGED
@@ -86,6 +86,44 @@ def split_pdf(file_path, start_page, end_page):
86
  zipf.close()
87
  return zip_path, start_page + 1, end_page + 1
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  def process_pdf(file, start_page, end_page):
90
  if file is None:
91
  return "❌ No file uploaded.", None
@@ -152,6 +190,31 @@ with gr.Blocks(title="PDF Utility") as demo:
152
  inputs=[pdf_uploads],
153
  outputs=[merge_status, merged_file]
154
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
 
156
- if __name__ == "__main__":
157
- demo.launch()
 
86
  zipf.close()
87
  return zip_path, start_page + 1, end_page + 1
88
 
89
+ def remove_pages(file, pages_to_remove):
90
+ if file is None:
91
+ return "❌ No file uploaded.", None
92
+
93
+ input_pdf = PdfReader(open(file.name, "rb"))
94
+ writer = PdfWriter()
95
+ total_pages = len(input_pdf.pages)
96
+
97
+ # Parse page numbers
98
+ pages_to_remove = pages_to_remove.replace(" ", "")
99
+ remove_set = set()
100
+
101
+ try:
102
+ for part in pages_to_remove.split(","):
103
+ if "-" in part:
104
+ start, end = map(int, part.split("-"))
105
+ remove_set.update(range(start, end + 1))
106
+ else:
107
+ remove_set.add(int(part))
108
+ except:
109
+ return "❌ Invalid page format.", None
110
+
111
+ # Keep valid pages only
112
+ remove_set = {p for p in remove_set if 0 <= p < total_pages}
113
+
114
+ for i in range(total_pages):
115
+ if i not in remove_set:
116
+ writer.add_page(input_pdf.pages[i])
117
+
118
+ output_dir = tempfile.mkdtemp()
119
+ output_path = os.path.join(output_dir, "pages_removed.pdf")
120
+
121
+ with open(output_path, "wb") as f:
122
+ writer.write(f)
123
+
124
+ status = f"✅ Removed pages: {sorted(remove_set)}"
125
+ return status, output_path
126
+
127
  def process_pdf(file, start_page, end_page):
128
  if file is None:
129
  return "❌ No file uploaded.", None
 
190
  inputs=[pdf_uploads],
191
  outputs=[merge_status, merged_file]
192
  )
193
+
194
+ with gr.TabItem("Remove Pages"):
195
+ gr.Markdown(
196
+ "Remove one or more pages from a PDF.\n\n"
197
+ "**Examples:** `2`, `1,3,5`, `2-6`, `1,3,5-7`\n\n"
198
+ "⚠️ Page numbers are **0-based**."
199
+ )
200
+
201
+ remove_file = gr.File(label="Upload PDF", file_types=[".pdf"])
202
+
203
+ pages_input = gr.Textbox(
204
+ label="Pages to remove",
205
+ placeholder="e.g. 1,3,5-7"
206
+ )
207
+
208
+ remove_button = gr.Button("🗑 Remove Pages")
209
+
210
+ remove_status = gr.Textbox(label="Status", lines=2)
211
+ removed_pdf = gr.File(label="Download PDF")
212
+
213
+ remove_button.click(
214
+ fn=remove_pages,
215
+ inputs=[remove_file, pages_input],
216
+ outputs=[remove_status, removed_pdf]
217
+ )
218
+
219
 
220
+ demo.launch()