Spaces:
Running
Running
import gradio as gr | |
from fpdf import FPDF | |
from PIL import Image | |
# Function to generate the CV PDF with an uploaded photo | |
def generate_pdf(full_name, phone, email, linkedin, address, summary, degree, university, graduation, courses, work_title, work_company, work_dates, work_responsibility, skills, achievements, extracurricular, certifications, photo): | |
pdf = FPDF() | |
pdf.add_page() | |
# Add Title | |
pdf.set_font("Arial", 'B', 16) | |
pdf.cell(200, 10, txt="CV", ln=True, align='C') | |
# Add photo if provided | |
if photo: | |
pdf.image(photo, x=10, y=10, w=30) | |
# Move the cursor below the image | |
pdf.ln(40) | |
# Personal Information | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(200, 10, txt="Personal Information", ln=True) | |
pdf.set_font("Arial", '', 12) | |
pdf.cell(200, 10, txt=f"Full Name: {full_name}", ln=True) | |
pdf.cell(200, 10, txt=f"Phone: {phone}", ln=True) | |
pdf.cell(200, 10, txt=f"Email: {email}", ln=True) | |
pdf.cell(200, 10, txt=f"LinkedIn: {linkedin}", ln=True) | |
pdf.cell(200, 10, txt=f"Address: {address}", ln=True) | |
# Professional Summary/Objective | |
pdf.cell(200, 10, txt="", ln=True) | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(200, 10, txt="Professional Summary/Objective", ln=True) | |
pdf.set_font("Arial", '', 12) | |
pdf.multi_cell(200, 10, txt=summary) | |
# Education | |
pdf.cell(200, 10, txt="", ln=True) | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(200, 10, txt="Education", ln=True) | |
pdf.set_font("Arial", '', 12) | |
pdf.cell(200, 10, txt=f"Degree: {degree}", ln=True) | |
pdf.cell(200, 10, txt=f"University: {university}", ln=True) | |
pdf.cell(200, 10, txt=f"Graduation Date: {graduation}", ln=True) | |
if courses: | |
pdf.multi_cell(200, 10, txt=f"Relevant Courses or Specializations: {courses}") | |
# Work Experience | |
pdf.cell(200, 10, txt="", ln=True) | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(200, 10, txt="Work Experience", ln=True) | |
pdf.set_font("Arial", '', 12) | |
pdf.cell(200, 10, txt=f"Job Title: {work_title}", ln=True) | |
pdf.cell(200, 10, txt=f"Company: {work_company}", ln=True) | |
pdf.cell(200, 10, txt=f"Dates: {work_dates}", ln=True) | |
pdf.multi_cell(200, 10, txt=f"Responsibilities and Achievements: {work_responsibility}") | |
# Skills | |
pdf.cell(200, 10, txt="", ln=True) | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(200, 10, txt="Skills", ln=True) | |
pdf.set_font("Arial", '', 12) | |
pdf.multi_cell(200, 10, txt=skills) | |
# Achievements | |
pdf.cell(200, 10, txt="", ln=True) | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(200, 10, txt="Achievements", ln=True) | |
pdf.set_font("Arial", '', 12) | |
pdf.multi_cell(200, 10, txt=achievements) | |
# Volunteer/Extracurricular Activities | |
pdf.cell(200, 10, txt="", ln=True) | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(200, 10, txt="Volunteer/Relevant Extracurricular Activities", ln=True) | |
pdf.set_font("Arial", '', 12) | |
pdf.multi_cell(200, 10, txt=extracurricular) | |
# Certifications/Licenses | |
pdf.cell(200, 10, txt="", ln=True) | |
pdf.set_font("Arial", 'B', 12) | |
pdf.cell(200, 10, txt="Certifications/Licenses", ln=True) | |
pdf.set_font("Arial", '', 12) | |
pdf.multi_cell(200, 10, txt=certifications) | |
# Save the PDF | |
pdf_file = "generated_cv_with_photo.pdf" | |
pdf.output(pdf_file) | |
return pdf_file | |
# Gradio interface to get input from user and generate CV with photo | |
def create_cv_with_photo(full_name, phone, email, linkedin, address, summary, degree, university, graduation, courses, work_title, work_company, work_dates, work_responsibility, skills, achievements, extracurricular, certifications, photo): | |
# Save the uploaded photo temporarily | |
if photo: | |
photo.save("uploaded_photo.jpg") | |
pdf_file = generate_pdf(full_name, phone, email, linkedin, address, summary, degree, university, graduation, courses, work_title, work_company, work_dates, work_responsibility, skills, achievements, extracurricular, certifications, "uploaded_photo.jpg") | |
else: | |
pdf_file = generate_pdf(full_name, phone, email, linkedin, address, summary, degree, university, graduation, courses, work_title, work_company, work_dates, work_responsibility, skills, achievements, extracurricular, certifications, None) | |
return pdf_file | |
# Gradio interface with photo upload | |
iface = gr.Interface( | |
fn=create_cv_with_photo, | |
inputs=[ | |
gr.Textbox(label="Full Name"), | |
gr.Textbox(label="Phone Number"), | |
gr.Textbox(label="Email"), | |
gr.Textbox(label="LinkedIn Profile"), | |
gr.Textbox(label="Address"), | |
gr.Textbox(label="Professional Summary/Objective", lines=2), | |
gr.Textbox(label="Degree"), | |
gr.Textbox(label="University/Institution"), | |
gr.Textbox(label="Graduation Date"), | |
gr.Textbox(label="Relevant Courses or Specializations", lines=2), | |
gr.Textbox(label="Work Title"), | |
gr.Textbox(label="Company Name"), | |
gr.Textbox(label="Dates of Employment"), | |
gr.Textbox(label="Work Responsibilities and Achievements", lines=4), | |
gr.Textbox(label="Skills", lines=3), | |
gr.Textbox(label="Achievements", lines=2), | |
gr.Textbox(label="Volunteer/Extracurricular Activities", lines=2), | |
gr.Textbox(label="Certifications/Licenses", lines=2), | |
gr.Image(type="pil", label="Upload Photo (optional)"), | |
], | |
outputs=gr.File(label="Download PDF CV"), | |
title="CV Generator with Photo", | |
description="Fill in the fields to generate your PDF CV. You can also upload a photo to be included." | |
) | |
# Launch the interface | |
iface.launch() | |