bk939448 commited on
Commit
2255202
·
verified ·
1 Parent(s): 4a5e8d2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -33
app.py CHANGED
@@ -2,39 +2,35 @@ import gradio as gr
2
  import PyPDF2
3
  import os
4
  import io
5
- import fitz # PyMuPDF
6
  from reportlab.pdfgen import canvas
7
  from reportlab.lib.pagesizes import A4
8
  from reportlab.lib import colors
9
 
10
- # --- हेल्पर फ़ंक्शन 1: सभी PDF से प्रीव्यू इमेज बनाने के लिए ---
11
- def generate_previews(main_pdf, additional_pdfs):
12
  if not main_pdf:
13
- return None, None, gr.update(visible=False), "कृपया पहले मुख्य PDF अपलोड करें."
14
 
15
  all_files = [main_pdf] + (additional_pdfs if additional_pdfs else [])
16
- previews, page_labels, total_page_count = [], [], 0
 
17
 
18
  try:
19
- os.makedirs("previews", exist_ok=True)
20
  for file_index, pdf_file in enumerate(all_files):
21
- doc = fitz.open(pdf_file.name)
22
- for page_index, page in enumerate(doc):
23
- total_page_count += 1
24
- pix = page.get_pixmap(dpi=72)
25
- img_path = f"previews/preview_{total_page_count}.png"
26
- pix.save(img_path)
27
- previews.append(img_path)
28
- # लेबल में फ़ाइल नंबर और पेज नंबर दोनों शामिल करें
29
  page_labels.append(f"File{file_index+1}-Page{page_index+1}")
30
- doc.close()
31
 
32
  status = f"{total_page_count} पेज {len(all_files)} फाइलों से पाए गए. जिन पेजों को रखना है, उन्हें चुनें."
33
- return previews, gr.update(choices=page_labels, value=page_labels), gr.update(visible=True), status
 
34
  except Exception as e:
35
- return None, None, gr.update(visible=False), f"प्रीव्यू ाने में त्रुटि: {e}"
36
 
37
- # --- मुख्य PDF प्रोसेसिंग फ़ंक्शन ---
38
  def process_pdf(main_pdf, additional_pdfs, selected_pages, split_pdf, style, custom_left, custom_right, x_pos, y_pos):
39
  if not main_pdf:
40
  raise gr.Error("मुख्य PDF फ़ाइल गायब है!")
@@ -45,17 +41,13 @@ def process_pdf(main_pdf, additional_pdfs, selected_pages, split_pdf, style, cus
45
  all_files = [main_pdf] + (additional_pdfs if additional_pdfs else [])
46
  readers = [PyPDF2.PdfReader(f.name) for f in all_files]
47
 
48
- # चरण 1: चुने हुए पेजों को फ़िल्टर और मर्ज करें
49
  filtered_writer = PyPDF2.PdfWriter()
50
  for label in selected_pages:
51
- # लेबल को पार्स करें: 'FileX-PageY' -> file_idx=X-1, page_idx=Y-1
52
  parts = label.replace("File", "").split("-Page")
53
  file_idx, page_idx = int(parts[0]) - 1, int(parts[1]) - 1
54
-
55
  if 0 <= file_idx < len(readers) and 0 <= page_idx < len(readers[file_idx].pages):
56
  filtered_writer.add_page(readers[file_idx].pages[page_idx])
57
 
58
- # चरण 2: इस नई, फ़िल्टर की गई PDF पर पुनः-नंबरिंग करें
59
  final_writer = PyPDF2.PdfWriter()
60
  filtered_pdf_stream = io.BytesIO()
61
  filtered_writer.write(filtered_pdf_stream)
@@ -86,7 +78,6 @@ def process_pdf(main_pdf, additional_pdfs, selected_pages, split_pdf, style, cus
86
  with open(final_numbered_path, "wb") as f:
87
  final_writer.write(f)
88
 
89
- # चरण 3: यदि चुना गया है तो इस अंतिम PDF को विभाजित करें
90
  if split_pdf:
91
  reader = PyPDF2.PdfReader(final_numbered_path)
92
  odd_writer, even_writer = PyPDF2.PdfWriter(), PyPDF2.PdfWriter()
@@ -107,20 +98,20 @@ def process_pdf(main_pdf, additional_pdfs, selected_pages, split_pdf, style, cus
107
  except Exception as e:
108
  raise gr.Error(f"एक गंभीर त्रुटि हुई: {e}")
109
 
110
- # --- Gradio इंटरफ़ेस ---
111
  with gr.Blocks(theme=gr.themes.Default(primary_hue="blue")) as demo:
112
- gr.Markdown("# 🚀 PDF वर्कफ़्लो स्टेशन v4.0 🚀\nPDF जोड़, पेज हटएं,ुनः-नंबकरें और िभजित करें!")
113
 
114
  # चरण 1: अपलोड
115
  gr.Markdown("### 1. अपनी PDF फाइलें अपलोड करें")
116
  main_pdf_input = gr.File(label="मुख्य PDF", file_types=[".pdf"])
117
  additional_pdfs_input = gr.File(label="(वैकल्पिक) जोड़ने के लिए और PDF", file_count="multiple", file_types=[".pdf"])
118
- generate_preview_button = gr.Button("🔍 सभी पेजों का प्रव्यू जेनरेट करें")
119
 
120
- # चरण 2: प्रीव्यू और चयन
121
- with gr.Column(visible=False) as preview_section:
122
  gr.Markdown("### 2. अंतिम PDF में रखने के लिए पेज चुनें")
123
- preview_gallery = gr.Gallery(label="सभी पेजों कीव्यू", show_label=True, columns=8, object_fit="contain", height="auto")
124
  page_selector = gr.CheckboxGroup(label="पेज चुनें")
125
 
126
  # चरण 3: सेटिंग्स और प्रोसेसिंग
@@ -140,16 +131,16 @@ with gr.Blocks(theme=gr.themes.Default(primary_hue="blue")) as demo:
140
 
141
  # चरण 4: आउटपुट
142
  with gr.Column():
143
- pdf_output_final = gr.File(label="अंतिम PDF डाउनलोड करें (मर्ज और नंबर की हुई)")
144
  with gr.Row():
145
  pdf_output_odd = gr.File(label="विषम पेज (Odd) डाउनलोड करें")
146
  pdf_output_even = gr.File(label="सम पेज (Even) डाउनलोड करें")
147
 
148
  # --- UI Logic ---
149
- generate_preview_button.click(
150
- fn=generate_previews,
151
  inputs=[main_pdf_input, additional_pdfs_input],
152
- outputs=[preview_gallery, page_selector, preview_section, status_output]
153
  )
154
 
155
  def toggle_custom_style(style): return gr.update(visible=(style == "Custom..."))
 
2
  import PyPDF2
3
  import os
4
  import io
 
5
  from reportlab.pdfgen import canvas
6
  from reportlab.lib.pagesizes import A4
7
  from reportlab.lib import colors
8
 
9
+ # --- हेल्पर फ़ंक्शन 1: सभी PDF से पेजों की सूची बनाने के लिए (बिना इमेज के) ---
10
+ def list_all_pages(main_pdf, additional_pdfs):
11
  if not main_pdf:
12
+ return None, gr.update(visible=False), "कृपया पहले मुख्य PDF अपलोड करें."
13
 
14
  all_files = [main_pdf] + (additional_pdfs if additional_pdfs else [])
15
+ page_labels = []
16
+ total_page_count = 0
17
 
18
  try:
 
19
  for file_index, pdf_file in enumerate(all_files):
20
+ # PyPDF2 का उपयोग करके पेजों की संख्या प्राप्त करें
21
+ reader = PyPDF2.PdfReader(pdf_file.name)
22
+ num_pages = len(reader.pages)
23
+ total_page_count += num_pages
24
+ for page_index in range(num_pages):
 
 
 
25
  page_labels.append(f"File{file_index+1}-Page{page_index+1}")
 
26
 
27
  status = f"{total_page_count} पेज {len(all_files)} फाइलों से पाए गए. जिन पेजों को रखना है, उन्हें चुनें."
28
+ # केवल चेकबॉक्स ग्रुप और सेक्शन को अपडेट करें
29
+ return gr.update(choices=page_labels, value=page_labels), gr.update(visible=True), status
30
  except Exception as e:
31
+ return None, gr.update(visible=False), f"फ़ाइल पढ़ने में त्रुटि: {e}. क्या यह एक वैध PDF है?"
32
 
33
+ # --- मुख्य PDF प्रोसेसिंग फ़ंक्शन (कोई बदलाव नहीं) ---
34
  def process_pdf(main_pdf, additional_pdfs, selected_pages, split_pdf, style, custom_left, custom_right, x_pos, y_pos):
35
  if not main_pdf:
36
  raise gr.Error("मुख्य PDF फ़ाइल गायब है!")
 
41
  all_files = [main_pdf] + (additional_pdfs if additional_pdfs else [])
42
  readers = [PyPDF2.PdfReader(f.name) for f in all_files]
43
 
 
44
  filtered_writer = PyPDF2.PdfWriter()
45
  for label in selected_pages:
 
46
  parts = label.replace("File", "").split("-Page")
47
  file_idx, page_idx = int(parts[0]) - 1, int(parts[1]) - 1
 
48
  if 0 <= file_idx < len(readers) and 0 <= page_idx < len(readers[file_idx].pages):
49
  filtered_writer.add_page(readers[file_idx].pages[page_idx])
50
 
 
51
  final_writer = PyPDF2.PdfWriter()
52
  filtered_pdf_stream = io.BytesIO()
53
  filtered_writer.write(filtered_pdf_stream)
 
78
  with open(final_numbered_path, "wb") as f:
79
  final_writer.write(f)
80
 
 
81
  if split_pdf:
82
  reader = PyPDF2.PdfReader(final_numbered_path)
83
  odd_writer, even_writer = PyPDF2.PdfWriter(), PyPDF2.PdfWriter()
 
98
  except Exception as e:
99
  raise gr.Error(f"एक गंभीर त्रुटि हुई: {e}")
100
 
101
+ # --- Gradio इंटरफ़ेस (UI में बदलाव) ---
102
  with gr.Blocks(theme=gr.themes.Default(primary_hue="blue")) as demo:
103
+ gr.Markdown("# 🚀 PDF वर्कफ़्लो स्टेशन v5.0 (लाइट) 🚀\nत, बिना पीव्यू वाला संस्कर!")
104
 
105
  # चरण 1: अपलोड
106
  gr.Markdown("### 1. अपनी PDF फाइलें अपलोड करें")
107
  main_pdf_input = gr.File(label="मुख्य PDF", file_types=[".pdf"])
108
  additional_pdfs_input = gr.File(label="(वैकल्पिक) जोड़ने के लिए और PDF", file_count="multiple", file_types=[".pdf"])
109
+ list_pages_button = gr.Button("📂 सभी पेजों कीची जेनरेट करें")
110
 
111
+ # चरण 2: चयन (बिना इमेज के)
112
+ with gr.Column(visible=False) as selection_section:
113
  gr.Markdown("### 2. अंतिम PDF में रखने के लिए पेज चुनें")
114
+ gr.Markdown("<p style='color:red;'>ध्यान दें: जिन पेजों क अनचेक केंगे, वे अंतिम फ़ाइल से हटा दिए जाएंगे.</p>")
115
  page_selector = gr.CheckboxGroup(label="पेज चुनें")
116
 
117
  # चरण 3: सेटिंग्स और प्रोसेसिंग
 
131
 
132
  # चरण 4: आउटपुट
133
  with gr.Column():
134
+ pdf_output_final = gr.File(label="अंतिम PDF डाउनलोड करें")
135
  with gr.Row():
136
  pdf_output_odd = gr.File(label="विषम पेज (Odd) डाउनलोड करें")
137
  pdf_output_even = gr.File(label="सम पेज (Even) डाउनलोड करें")
138
 
139
  # --- UI Logic ---
140
+ list_pages_button.click(
141
+ fn=list_all_pages,
142
  inputs=[main_pdf_input, additional_pdfs_input],
143
+ outputs=[page_selector, selection_section, status_output]
144
  )
145
 
146
  def toggle_custom_style(style): return gr.update(visible=(style == "Custom..."))