| """UI component and layout for the PDF Explainer app.""" |
|
|
| import gradio as gr |
| from gradio_pdf import PDF |
| from .styles import get_fullscreen_css |
|
|
| def build_interface(process_pdf_fn): |
| """Builds and returns the Gradio interface.""" |
| with gr.Blocks(title="π PDF Text Extractor", theme=gr.themes.Soft()) as demo: |
| gr.HTML(get_fullscreen_css()) |
| gr.Markdown("# π PDF Text Extractor") |
| gr.Markdown("Upload a PDF on the left to automatically extract and view text on the right.") |
| with gr.Row(equal_height=True): |
| with gr.Column(scale=1): |
| gr.Markdown("### π PDF Document") |
| pdf_input = PDF( |
| label="Upload and View PDF", |
| height=600, |
| interactive=True |
| ) |
| status_output = gr.Textbox( |
| label="Status", |
| lines=2, |
| placeholder="Upload a PDF to see status...", |
| interactive=False |
| ) |
| with gr.Column(scale=1): |
| gr.Markdown("### π Extracted Content") |
| with gr.Tabs(): |
| with gr.TabItem("Extracted Text"): |
| text_output = gr.Textbox( |
| label="Extracted Text", |
| lines=20, |
| placeholder="Upload a PDF to automatically extract text...", |
| show_copy_button=True, |
| interactive=False |
| ) |
| with gr.TabItem("Explanation Script"): |
| explanation_output = gr.Textbox( |
| label="Generated Explanation Script", |
| lines=15, |
| placeholder="Explanations will be automatically generated after text extraction...", |
| show_copy_button=True, |
| interactive=False ) |
| gr.Markdown("### π Audio Generation") |
| audio_output = gr.Audio( |
| label="Generated Explanation Audio", |
| interactive=False, |
| visible=False, |
| ) |
| |
| pdf_input.upload( |
| fn=process_pdf_fn, |
| inputs=[pdf_input], |
| outputs=[text_output, status_output, explanation_output, audio_output, audio_output] |
| ) |
| return demo |
|
|