import os import tempfile from reportlab.lib.pagesizes import A4 from reportlab.pdfgen import canvas import gradio as gr def create_cv( full_name, email, phone, address, objective, education, experience, skills, ): temp_dir = tempfile.gettempdir() pdf_path = os.path.join(temp_dir, "CV.pdf") c = canvas.Canvas(pdf_path, pagesize=A4) width, height = A4 y = height - 50 c.setFont("Helvetica-Bold", 22) c.drawString(50, y, full_name) y -= 30 c.setFont("Helvetica", 11) c.drawString(50, y, f"Email: {email}") y -= 18 c.drawString(50, y, f"Phone: {phone}") y -= 18 c.drawString(50, y, f"Address: {address}") y -= 35 c.setFont("Helvetica-Bold", 15) c.drawString(50, y, "Career Objective") y -= 20 c.setFont("Helvetica", 11) for line in objective.split("\n"): c.drawString(60, y, line) y -= 15 y -= 10 c.setFont("Helvetica-Bold", 15) c.drawString(50, y, "Education") y -= 20 c.setFont("Helvetica", 11) for line in education.split("\n"): c.drawString(60, y, line) y -= 15 y -= 10 c.setFont("Helvetica-Bold", 15) c.drawString(50, y, "Experience") y -= 20 c.setFont("Helvetica", 11) for line in experience.split("\n"): c.drawString(60, y, line) y -= 15 y -= 10 c.setFont("Helvetica-Bold", 15) c.drawString(50, y, "Skills") y -= 20 c.setFont("Helvetica", 11) for line in skills.split(","): c.drawString(60, y, "• " + line.strip()) y -= 15 c.save() return pdf_path demo = gr.Interface( fn=create_cv, inputs=[ gr.Textbox(label="Full Name"), gr.Textbox(label="Email"), gr.Textbox(label="Phone"), gr.Textbox(label="Address"), gr.Textbox(lines=4, label="Career Objective"), gr.Textbox(lines=6, label="Education"), gr.Textbox(lines=6, label="Experience"), gr.Textbox(lines=4, label="Skills (Comma Separated)"), ], outputs=gr.File(label="Download CV"), title="Professional CV Builder", description="Fill the form and download your CV as PDF.", ) if __name__ == "__main__": demo.launch()