# app.py
import gradio as gr
from model import (
images_to_pdf,
merge_pdfs,
compress_pdf,
save_feedback,
show_feedback
)
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;}
"""
with gr.Blocks(css=css, title="Its Nadish - Image to PDF") as demo:
gr.HTML('
Its Nadish
')
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()), # compression_map model.py se aa raha hai
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]
)
# app.py ke sabse last mein yeh rakho (purana wala replace kar do)
if __name__ == "__main__":
demo.launch(
#server_name="0.0.0.0", # ← Yeh line **hatado** ya comment out kar do
# server_port=7860, # Yeh bhi hatado
share=False,
ssr_mode=False # Agar UI loading slow ya glitchy lage to yeh rakho
)=7860)