Byaidu 1 жил өмнө
parent
commit
e550f8b0fa
1 өөрчлөгдсөн 21 нэмэгдсэн , 13 устгасан
  1. 21 13
      pdf2zh/gui.py

+ 21 - 13
pdf2zh/gui.py

@@ -74,16 +74,16 @@ def pdf_preview(file):
 def upload_file(file, service, progress=gr.Progress()):
     """Handle file upload, validation, and initial preview."""
     if not file or not os.path.exists(file):
-        return None, None, gr.update(visible=False), gr.update(visible=False)
+        return None, None
 
     try:
         # Convert first page for preview
         preview_image = pdf_preview(file)
 
-        return file, preview_image, gr.update(visible=True), gr.update(visible=True)
+        return file, preview_image
     except Exception as e:
         print(f"Error converting PDF: {e}")
-        return None, None, gr.update(visible=False), gr.update(visible=False)
+        return None, None
 
 
 def translate(
@@ -107,7 +107,7 @@ def translate(
     shutil.copyfile(file_path, file_en)
 
     selected_service = service_map.get(service, "google")
-    selected_page = page_map.get(page_range, [1])
+    selected_page = page_map.get(page_range, [0])
     lang_to = lang_map.get(lang, "zh")
     if selected_service == "google":
         lang_to = "zh-CN" if lang_to == "zh" else lang_to
@@ -222,7 +222,7 @@ with gr.Blocks(
     # }
     """,
     head='''
-    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
+    <script src="https://www.google.com/recaptcha/api.js?render=explicit" async defer></script>
     <script type="text/javascript">
         var onVerify = function(token) {
             el=document.getElementById('verify').getElementsByTagName('textarea')[0];
@@ -230,7 +230,7 @@ with gr.Blocks(
             el.dispatchEvent(new Event('input'));
         };
     </script>
-    ''' if flag_demo else None
+    ''' if flag_demo else ""
 ) as demo:
     gr.Markdown("# [PDFMathTranslate @ Github](https://github.com/Byaidu/PDFMathTranslate)")
 
@@ -336,11 +336,8 @@ with gr.Blocks(
                 label="Download Translation (Dual)", visible=False
             )
             recaptcha_response = gr.Textbox(label="reCAPTCHA Response", elem_id='verify', visible=False)
-            if flag_demo:
-                recaptcha_box=gr.HTML(f'<div class="g-recaptcha" data-sitekey="{client_key}" data-callback="onVerify"></div>', visible=False)
-            else:
-                recaptcha_box=gr.HTML()
-            translate_btn = gr.Button("Translate", variant="primary", visible=False)
+            recaptcha_box=gr.HTML(f'<div id="recaptcha-box"></div>')
+            translate_btn = gr.Button("Translate", variant="primary")
             tech_details_tog = gr.Markdown(
                 details_wrapper(envs_status),
                 elem_classes=["secondary-text"],
@@ -355,7 +352,18 @@ with gr.Blocks(
     file_input.upload(
         upload_file,
         inputs=[file_input, service],
-        outputs=[file_input, preview, translate_btn, recaptcha_box],
+        outputs=[file_input, preview],
+        js=f"""
+            (a,b)=>{{
+                try{{
+                    grecaptcha.render('recaptcha-box',{{
+                        'sitekey':'{client_key}',
+                        'callback':'onVerify'
+                    }});
+                }}catch(error){{}}
+                return [a];
+            }}
+            """ if flag_demo else ""
     )
 
     translate_btn.click(
@@ -369,7 +377,7 @@ with gr.Blocks(
             output_file_dual,
             output_title,
         ],
-    )
+    ).then(lambda:None,js="()=>{grecaptcha.reset()}" if flag_demo else "")
 
 
 def setup_gui(share=False):