File size: 4,343 Bytes
e8bbcc4
 
 
 
 
 
b716ebb
 
e8bbcc4
 
 
 
 
 
 
 
b716ebb
 
e8bbcc4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b716ebb
e8bbcc4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b716ebb
e8bbcc4
c9ad44f
b716ebb
c9ad44f
3f6250b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import gradio as gr
from model import (
    images_to_pdf,
    merge_pdfs,
    compress_pdf,
    save_feedback,
    show_feedback,
    compression_map   # βœ… FIX: yeh add kiya
)

css = """
.title {color:green; font-size:32px; font-weight:bold; text-align:center; margin-bottom:20px;}
.download-btn {background-color:green !important; color:white !important;}
.reset-btn {background-color:red !important; color:white !important;}
"""

# ❌ css yahan se hata diya (Gradio 6 fix)
with gr.Blocks(title="Its Nadish - Image to PDF") as demo:
    gr.HTML('<div class="title">Its Nadish</div>')
    gr.Markdown("### Powerful Image to PDF | Merge | Compress Tool")

    with gr.Tabs():
        # Tab 1: Images to PDF
        with gr.TabItem("πŸ–ΌοΈ Images to PDF"):
            with gr.Row():
                with gr.Column():
                    img_input = gr.File(
                        file_types=["image"],
                        file_count="multiple",
                        label="Upload Images (JPG, PNG, etc.)"
                    )
                    convert_btn = gr.Button("Convert to PDF", variant="primary")
                
                with gr.Column():
                    p_size = gr.Dropdown(["A4", "Letter", "Legal", "Original"], value="A4", label="Page Size")
                    p_orient = gr.Radio(["Portrait", "Landscape"], value="Portrait", label="Orientation")
                    p_qual = gr.Dropdown(["Low", "Medium", "High", "Maximum"], value="High", label="Quality")
                    p_comp = gr.Checkbox(label="Enable Compression", value=True)
                    img_download = gr.DownloadButton("Download PDF", elem_classes="download-btn")
            img_msg = gr.Markdown()

        # Tab 2: Merge PDFs
        with gr.TabItem("πŸ“‘ Merge PDFs"):
            merge_input = gr.File(file_types=[".pdf"], file_count="multiple", label="Upload PDF Files")
            merge_btn = gr.Button("Merge Files", variant="primary")
            merge_download = gr.DownloadButton("Download Merged PDF", elem_classes="download-btn")
            comb_msg = gr.Markdown()

        # Tab 3: Compress PDF
        with gr.TabItem("πŸ“‰ Compress PDF"):
            comp_file = gr.File(file_types=[".pdf"], label="Upload PDF")
            comp_lvl = gr.Dropdown(
                list(compression_map.keys()),   # βœ… ab error nahi ayega
                value="Balanced (Good Quality + Small Size)",
                label="Compression Level"
            )
            comp_btn = gr.Button("Compress Now", variant="primary")
            comp_download = gr.DownloadButton("Download Compressed PDF")
            comp_msg = gr.Markdown()
            comp_table = gr.Markdown()

    # Feedback Section
    with gr.Accordion("⭐ Give Feedback to Nadish", open=False):
        f_name = gr.Textbox(label="Name or Email (Optional)")
        f_txt = gr.Textbox(label="Your Feedback", lines=3)
        f_rate = gr.Radio(["⭐", "⭐⭐", "⭐⭐⭐", "⭐⭐⭐⭐", "⭐⭐⭐⭐⭐"], label="Rating")
        f_btn = gr.Button("Submit Feedback")
        f_msg = gr.Markdown()

    with gr.Accordion("πŸ“‹ View All Feedback", open=False):
        view_btn = gr.Button("Show Feedback")
        view_msg = gr.Markdown()

    reset_btn = gr.Button("Reset Everything", variant="stop", elem_classes="reset-btn")

    # Button Actions
    convert_btn.click(
        images_to_pdf,
        inputs=[img_input, p_size, p_orient, p_qual, p_comp],
        outputs=[img_download, img_msg]
    )

    merge_btn.click(
        merge_pdfs,
        inputs=[merge_input],
        outputs=[merge_download, comb_msg]
    )

    comp_btn.click(
        compress_pdf,
        inputs=[comp_file, comp_lvl],
        outputs=[comp_download, comp_msg, comp_table]
    )

    f_btn.click(
        save_feedback,
        inputs=[f_name, f_txt, f_rate],
        outputs=f_msg
    )

    view_btn.click(show_feedback, outputs=view_msg)

    # Reset function
    def clear_all():
        return [None] * 10 + [""]

    reset_btn.click(
        clear_all,
        outputs=[img_input, merge_input, comp_file, img_download, merge_download,
                 img_msg, comb_msg, comp_msg, comp_table, f_msg]
    )

# βœ… launch me css shift kiya (Gradio 6 fix)
if __name__ == "__main__":
    demo.launch(
        css=css,
        share=False,
        ssr_mode=False
    )