Can you creat my CV for job as medical officer
Please provide your full name, contact details (phone, email, location/city), and any links (LinkedIn, etc.) if you have them. · What is your highest medical qualification and how many years of experience do you have? · What format would you like the CV in?
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or does not exist"
mkdir -p /home/daytona/workspace/medical-cv && python3 -c "from reportlab.lib.pagesizes import A4; print('reportlab OK')" && python3 -c "from reportlab.platypus import SimpleDocTemplate; print('platypus OK')"
~/medical-cv/generate_cv.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, HRFlowable,
Table, TableStyle, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT
from reportlab.pdfgen import canvas
OUTPUT = "/home/daytona/workspace/medical-cv/Medical_Officer_CV.pdf"
# ── Colour palette ──────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1B3A6B")
TEAL = colors.HexColor("#0D7B8A")
LGRAY = colors.HexColor("#F4F6F9")
MGRAY = colors.HexColor("#7F8C8D")
BLACK = colors.HexColor("#1A1A1A")
WHITE = colors.white
LINE = colors.HexColor("#CBD5E0")
PAGE_W, PAGE_H = A4
LEFT_M = 1.8*cm
RIGHT_M = 1.8*cm
TOP_M = 1.5*cm
BOT_M = 1.5*cm
# ── Styles ───────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
name_style = S("Name",
fontName="Helvetica-Bold", fontSize=26, textColor=WHITE,
leading=30, alignment=TA_LEFT, spaceAfter=2)
title_style = S("Title",
fontName="Helvetica", fontSize=13, textColor=colors.HexColor("#A8D8E8"),
leading=16, alignment=TA_LEFT)
contact_style = S("Contact",
fontName="Helvetica", fontSize=9, textColor=WHITE,
leading=13, alignment=TA_LEFT)
section_head = S("SecHead",
fontName="Helvetica-Bold", fontSize=11, textColor=NAVY,
leading=14, spaceBefore=8, spaceAfter=4, alignment=TA_LEFT)
body = S("Body",
fontName="Helvetica", fontSize=9.5, textColor=BLACK,
leading=14, spaceAfter=3)
body_bold = S("BodyBold",
fontName="Helvetica-Bold", fontSize=9.5, textColor=BLACK,
leading=14, spaceAfter=2)
bullet_style = S("Bullet",
fontName="Helvetica", fontSize=9.5, textColor=BLACK,
leading=14, leftIndent=10, bulletIndent=0, spaceAfter=2,
bulletFontName="Helvetica", bulletFontSize=9.5)
small_gray = S("SmallGray",
fontName="Helvetica", fontSize=8.5, textColor=MGRAY,
leading=12, spaceAfter=2)
# ── Header canvas callback ────────────────────────────────────────────────────
def draw_header(canv, doc):
"""Draw a coloured header band at the top of page 1 only."""
if doc.page == 1:
# Main navy band
canv.setFillColor(NAVY)
canv.rect(0, PAGE_H - 58*mm, PAGE_W, 58*mm, fill=1, stroke=0)
# Teal accent strip
canv.setFillColor(TEAL)
canv.rect(0, PAGE_H - 62*mm, PAGE_W, 4*mm, fill=1, stroke=0)
# Side accent bar
canv.setFillColor(TEAL)
canv.rect(0, 0, 5*mm, PAGE_H - 62*mm, fill=1, stroke=0)
# ── Document ──────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=LEFT_M,
rightMargin=RIGHT_M,
topMargin=TOP_M + 58*mm, # leave room for the header band
bottomMargin=BOT_M,
title="Medical Officer CV",
author="[Your Name]"
)
story = []
# ── HEADER CONTENT (overlaid via canvas; we add a spacer for layout) ─────────
# We'll inject the header text using a table that sits at the very top
# by temporarily reducing topMargin for first-frame elements.
# Header info table (sits inside the navy band area – we use negative spacer trick)
# Instead, we prepend with a framed table styled to match.
header_name = Paragraph("[YOUR FULL NAME]", name_style)
header_title = Paragraph("MBBS | Medical Officer", title_style)
header_contact = Paragraph(
"✉ your.email@example.com "
"☏ +00 000 000 0000 "
"● City, Country "
"🔗 linkedin.com/in/yourprofile",
contact_style)
header_table = Table(
[[header_name], [header_title], [Spacer(1, 3*mm)], [header_contact]],
colWidths=[PAGE_W - LEFT_M - RIGHT_M]
)
header_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (0,0), 4),
("BOTTOMPADDING",(0,-1),(-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
]))
story.append(header_table)
story.append(Spacer(1, 6*mm))
# ── Helper: section divider ──────────────────────────────────────────────────
def section(title):
story.append(KeepTogether([
Paragraph(title.upper(), section_head),
HRFlowable(width="100%", thickness=1.2, color=TEAL, spaceAfter=4),
]))
def job(title, org, location, dates, bullets):
story.append(KeepTogether([
Paragraph(f"<b>{title}</b>", body_bold),
Paragraph(f"{org} | <i>{location}</i>", small_gray),
Paragraph(dates, small_gray),
*[Paragraph(f"• {b}", bullet_style) for b in bullets],
Spacer(1, 3*mm),
]))
def edu(degree, institution, year, detail=""):
rows = [Paragraph(f"<b>{degree}</b>", body_bold),
Paragraph(f"{institution}", small_gray),
Paragraph(year, small_gray)]
if detail:
rows.append(Paragraph(detail, bullet_style))
rows.append(Spacer(1, 3*mm))
story.append(KeepTogether(rows))
# ══════════════════════════════════════════════════════════════════════════════
# PROFESSIONAL SUMMARY
# ══════════════════════════════════════════════════════════════════════════════
section("Professional Summary")
story.append(Paragraph(
"Dedicated and compassionate Medical Officer with [X] years of clinical experience in "
"primary and secondary healthcare settings. Proficient in patient assessment, emergency "
"management, and evidence-based treatment planning. Committed to delivering high-quality "
"patient care, improving clinical outcomes, and working collaboratively within "
"multidisciplinary teams. Replace this paragraph with your own 3-4 sentence summary.",
body))
story.append(Spacer(1, 4*mm))
# ══════════════════════════════════════════════════════════════════════════════
# WORK EXPERIENCE
# ══════════════════════════════════════════════════════════════════════════════
section("Work Experience")
job(
"Medical Officer",
"[Hospital / Clinic Name]",
"[City, Country]",
"Month Year – Present",
[
"Conducted history-taking, physical examinations, and formulated differential diagnoses for OPD and admitted patients.",
"Managed acute and chronic conditions including hypertension, diabetes mellitus, respiratory and GI disorders.",
"Performed emergency procedures: IV line insertion, wound suturing, CPR, and airway management.",
"Ordered and interpreted laboratory investigations, ECGs, and imaging studies.",
"Collaborated with specialists for complex case referrals and multidisciplinary team rounds.",
"Maintained accurate and up-to-date patient records and discharge summaries.",
]
)
job(
"Intern / Resident Medical Officer",
"[Teaching Hospital Name]",
"[City, Country]",
"Month Year – Month Year",
[
"Completed rotations in Internal Medicine, Surgery, Obstetrics & Gynaecology, Paediatrics, and Psychiatry.",
"Assisted in minor surgical procedures and obstetric deliveries under supervision.",
"Participated in grand rounds, case presentations, and departmental CME sessions.",
"Managed 20+ patients daily in inpatient wards with consistent clinical supervision.",
]
)
# ══════════════════════════════════════════════════════════════════════════════
# EDUCATION
# ══════════════════════════════════════════════════════════════════════════════
section("Education")
edu(
"MBBS – Bachelor of Medicine, Bachelor of Surgery",
"[Medical University Name], [City, Country]",
"Year of Graduation: [YYYY]",
"Final Year Grade / CGPA: [X.X/10] or [First Division]"
)
edu(
"Higher Secondary (Science Stream – PCB)",
"[School / College Name], [City, Country]",
"Year: [YYYY] | Percentage: [XX%]",
)
# ══════════════════════════════════════════════════════════════════════════════
# CLINICAL SKILLS
# ══════════════════════════════════════════════════════════════════════════════
section("Clinical Skills")
skills_data = [
["Patient Assessment & Diagnosis", "Emergency & Trauma Management"],
["ECG Interpretation", "IV Cannulation & Phlebotomy"],
["Wound Care & Suturing", "Nasogastric Tube Insertion"],
["Urinary Catheterisation", "Airway Management (BVM, Intubation assist)"],
["CPR & Basic Life Support (BLS)", "Advanced Cardiac Life Support (ACLS)"],
["Prescription & Drug Management", "Clinical Documentation & EHR Systems"],
]
skill_table = Table(skills_data, colWidths=[(PAGE_W-LEFT_M-RIGHT_M)/2]*2)
skill_table.setStyle(TableStyle([
("FONTNAME", (0,0), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("TEXTCOLOR", (0,0), (-1,-1), BLACK),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("ROWBACKGROUNDS",(0,0), (-1,-1), [LGRAY, WHITE]),
("GRID", (0,0), (-1,-1), 0.3, LINE),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(skill_table)
story.append(Spacer(1, 5*mm))
# ══════════════════════════════════════════════════════════════════════════════
# CERTIFICATIONS & TRAINING
# ══════════════════════════════════════════════════════════════════════════════
section("Certifications & Training")
certs = [
("Basic Life Support (BLS)", "[Issuing Body, e.g. AHA / Red Cross]", "[Year]"),
("Advanced Cardiac Life Support (ACLS)", "[Issuing Body]", "[Year]"),
("Emergency Triage & Trauma Care Workshop", "[Hospital / Institution]", "[Year]"),
("[Other Certification / CME Course]", "[Issuing Body]", "[Year]"),
]
cert_table_data = [
[Paragraph(f"<b>{c[0]}</b>", body_bold),
Paragraph(c[1], small_gray),
Paragraph(c[2], small_gray)]
for c in certs
]
cert_table = Table(cert_table_data,
colWidths=[(PAGE_W-LEFT_M-RIGHT_M)*0.52,
(PAGE_W-LEFT_M-RIGHT_M)*0.33,
(PAGE_W-LEFT_M-RIGHT_M)*0.15])
cert_table.setStyle(TableStyle([
("FONTSIZE", (0,0), (-1,-1), 9.5),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("ROWBACKGROUNDS",(0,0), (-1,-1), [WHITE, LGRAY]),
("LINEBELOW", (0,0), (-1,-2), 0.3, LINE),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(cert_table)
story.append(Spacer(1, 5*mm))
# ══════════════════════════════════════════════════════════════════════════════
# LANGUAGES
# ══════════════════════════════════════════════════════════════════════════════
section("Languages")
lang_data = [
["English", "Fluent (Professional Proficiency)"],
["[Language 2]", "[Native / Fluent / Conversational]"],
["[Language 3]", "[Basic]"],
]
lang_table = Table(lang_data,
colWidths=[(PAGE_W-LEFT_M-RIGHT_M)*0.3, (PAGE_W-LEFT_M-RIGHT_M)*0.7])
lang_table.setStyle(TableStyle([
("FONTNAME", (0,0), (-1,-1), "Helvetica"),
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("TEXTCOLOR", (0,0), (-1,-1), BLACK),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LINEBELOW", (0,0), (-1,-2), 0.3, LINE),
]))
story.append(lang_table)
story.append(Spacer(1, 5*mm))
# ══════════════════════════════════════════════════════════════════════════════
# REFERENCES
# ══════════════════════════════════════════════════════════════════════════════
section("References")
story.append(Paragraph(
"Available upon request. Please contact via email or phone to arrange referee details.",
body))
# ── Build ────────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=draw_header, onLaterPages=draw_header)
print(f"PDF saved: {OUTPUT}")
cd /home/daytona/workspace/medical-cv && python3 generate_cv.py
Medical Officer CV
PDF Document · PDF
| Section | What to fill in |
|---|---|
| Header | Your name, job title, email, phone, city, LinkedIn |
| Professional Summary | 3-4 sentences about your background and goals |
| Work Experience | 2 positions pre-populated with typical Medical Officer duties - update with your actual employers and dates |
| Education | MBBS entry + secondary education - add your university name and year |
| Clinical Skills | 12 skills in a formatted table - add/remove as needed |
| Certifications | BLS, ACLS, and CME courses - update with your actual certs |
| Languages | Add your languages and proficiency levels |
| References | "Available on request" line |
/home/daytona/workspace/medical-cv/generate_cv.py and replace all [...] placeholders with your real details.python3 /home/daytona/workspace/medical-cv/generate_cv.py again to regenerate the PDF instantly.Creat fresher CV
Please share your personal details so I can fill them in the CV: · What is your qualification?
~/medical-cv/generate_fresher_cv.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, HRFlowable,
Table, TableStyle, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER
OUTPUT = "/home/daytona/workspace/medical-cv/Fresher_Medical_Officer_CV.pdf"
# ── Colours ──────────────────────────────────────────────────────────────────
NAVY = colors.HexColor("#1B3A6B")
TEAL = colors.HexColor("#0E8A8A")
LGRAY = colors.HexColor("#F4F6F9")
MGRAY = colors.HexColor("#6B7280")
BLACK = colors.HexColor("#1A1A1A")
WHITE = colors.white
LINE = colors.HexColor("#CBD5E0")
ACCENT = colors.HexColor("#E8F4F8")
PAGE_W, PAGE_H = A4
L_MAR = 1.8*cm
R_MAR = 1.8*cm
T_MAR = 1.5*cm
B_MAR = 1.5*cm
# ── Styles ───────────────────────────────────────────────────────────────────
def S(name, **kw):
return ParagraphStyle(name, **kw)
name_style = S("Name", fontName="Helvetica-Bold", fontSize=28, textColor=WHITE,
leading=32, alignment=TA_LEFT)
deg_style = S("Deg", fontName="Helvetica", fontSize=13, textColor=colors.HexColor("#A8D8E8"),
leading=17, alignment=TA_LEFT)
contact_style = S("Cont", fontName="Helvetica", fontSize=9, textColor=WHITE,
leading=14, alignment=TA_LEFT)
sec_head = S("Sec", fontName="Helvetica-Bold", fontSize=11, textColor=NAVY,
leading=14, spaceBefore=6, spaceAfter=3)
body = S("Body", fontName="Helvetica", fontSize=9.5, textColor=BLACK, leading=14)
body_bold = S("BB", fontName="Helvetica-Bold", fontSize=9.5, textColor=BLACK, leading=14)
small_gray = S("SG", fontName="Helvetica", fontSize=8.5, textColor=MGRAY, leading=12)
bullet_s = S("Bul", fontName="Helvetica", fontSize=9.5, textColor=BLACK,
leading=14, leftIndent=12, spaceAfter=2)
# ── Doc ───────────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=L_MAR, rightMargin=R_MAR,
topMargin=T_MAR + 60*mm, bottomMargin=B_MAR,
title="Fresher Medical Officer CV"
)
story = []
# ── Canvas callback: header band ─────────────────────────────────────────────
def draw_bg(canv, doc):
if doc.page == 1:
# Navy header band
canv.setFillColor(NAVY)
canv.rect(0, PAGE_H - 60*mm, PAGE_W, 60*mm, fill=1, stroke=0)
# Bottom accent strip of header
canv.setFillColor(TEAL)
canv.rect(0, PAGE_H - 64*mm, PAGE_W, 4*mm, fill=1, stroke=0)
# Left teal sidebar on every page
canv.setFillColor(TEAL)
canv.rect(0, 0, 5*mm, PAGE_H, fill=1, stroke=0)
# ── Header table ─────────────────────────────────────────────────────────────
hdr = Table([
[Paragraph("[YOUR FULL NAME]", name_style)],
[Paragraph("MBBS | Fresh Graduate | Medical Officer Applicant", deg_style)],
[Spacer(1, 4*mm)],
[Paragraph(
"✉ your.email@example.com "
"☏ +00 000 000 0000 "
"● City, Country "
"🔗 linkedin.com/in/yourprofile",
contact_style)],
], colWidths=[PAGE_W - L_MAR - R_MAR])
hdr.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (0,0), 6),
("BOTTOMPADDING", (0,-1),(-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
]))
story.append(hdr)
story.append(Spacer(1, 7*mm))
# ── Helpers ───────────────────────────────────────────────────────────────────
def section(title):
story.append(KeepTogether([
Paragraph(title.upper(), sec_head),
HRFlowable(width="100%", thickness=1.5, color=TEAL, spaceAfter=5),
]))
def bullet(text):
story.append(Paragraph(f"• {text}", bullet_s))
def edu_entry(degree, institution, year, grade=""):
rows = [
Paragraph(f"<b>{degree}</b>", body_bold),
Paragraph(institution, small_gray),
Paragraph(year, small_gray),
]
if grade:
rows.append(Paragraph(grade, small_gray))
rows.append(Spacer(1, 3*mm))
story.append(KeepTogether(rows))
# ═════════════════════════════════════════════════════════════════════════════
# 1. OBJECTIVE
# ═════════════════════════════════════════════════════════════════════════════
section("Career Objective")
story.append(Paragraph(
"A highly motivated and compassionate fresh MBBS graduate seeking a Medical Officer position "
"to apply clinical knowledge gained during medical training and internship rotations. "
"Committed to delivering patient-centred care, continuing professional development, "
"and contributing meaningfully to a dynamic healthcare team. "
"<i>(Customise this with your own 2-3 sentences.)</i>",
body))
story.append(Spacer(1, 5*mm))
# ═════════════════════════════════════════════════════════════════════════════
# 2. EDUCATION
# ═════════════════════════════════════════════════════════════════════════════
section("Education")
edu_entry(
"MBBS – Bachelor of Medicine, Bachelor of Surgery",
"[Medical University / College Name], [City, Country]",
"Year of Graduation: [YYYY]",
"Aggregate / CGPA: [XX% or X.X/10] | [First Division / Distinction / Pass with Merit]"
)
edu_entry(
"Higher Secondary Certificate (HSC) – Science (PCB)",
"[School / College Name], [City, Country]",
"Year: [YYYY] | Percentage / Grade: [XX%]"
)
edu_entry(
"Secondary School Certificate (SSC / Matriculation)",
"[School Name], [City, Country]",
"Year: [YYYY] | Percentage / Grade: [XX%]"
)
# ═════════════════════════════════════════════════════════════════════════════
# 3. INTERNSHIP / CLINICAL ROTATIONS
# ═════════════════════════════════════════════════════════════════════════════
section("Internship & Clinical Rotations")
story.append(Paragraph(
"<b>[Teaching Hospital Name]</b> | <i>[City, Country]</i>", body_bold))
story.append(Paragraph("Duration: [Month YYYY] – [Month YYYY] (12 Months Compulsory Rotating Internship)", small_gray))
story.append(Spacer(1, 3*mm))
rotations = [
("Internal Medicine",
["Assisted in management of hypertension, diabetes, COPD, and heart failure.",
"Participated in ward rounds, case presentations, and discharge planning.",
"Interpreted ECGs, chest X-rays, and basic blood investigations."]),
("Surgery",
["Assisted in minor and elective surgical procedures including appendicectomy and hernia repair.",
"Performed wound dressing, suturing, and post-operative monitoring.",
"Managed surgical drains, catheters, and IV lines independently."]),
("Obstetrics & Gynaecology",
["Conducted antenatal check-ups, monitored CTG tracings, and assisted in normal deliveries.",
"Assisted in Caesarean sections and managed post-partum care.",
"Performed gynaecological examinations and PAP smear collections."]),
("Paediatrics",
["Managed neonatal care including APGAR scoring and neonatal resuscitation.",
"Treated common paediatric conditions: pneumonia, gastroenteritis, febrile seizures.",
"Conducted growth and developmental milestone assessments."]),
("Emergency Medicine",
["Triaged and stabilised emergency cases including trauma, MI, and acute abdomen.",
"Performed CPR, IV access, nebulisation, and emergency drug administration.",
"Assisted in management of poisoning, drowning, and road traffic accident cases."]),
("Psychiatry / Community Medicine",
["Conducted mental status examinations and managed anxiety/depression cases.",
"Participated in community health camps and vaccination drives.",
"Prepared health education materials and conducted patient counselling sessions."]),
]
for dept, bullets in rotations:
story.append(KeepTogether([
Paragraph(f"<b>{dept}</b>", body_bold),
*[Paragraph(f"• {b}", bullet_s) for b in bullets],
Spacer(1, 3*mm),
]))
# ═════════════════════════════════════════════════════════════════════════════
# 4. CLINICAL SKILLS
# ═════════════════════════════════════════════════════════════════════════════
section("Clinical Skills")
skills = [
("History Taking & Physical Examination", "ECG Recording & Interpretation"),
("IV Cannulation & Phlebotomy", "Wound Care & Suturing"),
("Urinary Catheterisation", "Nasogastric Tube Insertion"),
("Arterial Blood Gas (ABG) Sampling", "Intravenous Fluid Management"),
("Basic Life Support (BLS)", "Neonatal Resuscitation"),
("Drug Prescription & Administration", "Clinical Documentation & EMR"),
]
sk_table = Table(skills, colWidths=[(PAGE_W - L_MAR - R_MAR)/2]*2)
sk_table.setStyle(TableStyle([
("FONTNAME", (0,0), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("TEXTCOLOR", (0,0), (-1,-1), BLACK),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("ROWBACKGROUNDS",(0,0), (-1,-1), [LGRAY, WHITE]),
("GRID", (0,0), (-1,-1), 0.3, LINE),
]))
story.append(sk_table)
story.append(Spacer(1, 5*mm))
# ═════════════════════════════════════════════════════════════════════════════
# 5. CERTIFICATIONS
# ═════════════════════════════════════════════════════════════════════════════
section("Certifications & Training")
certs = [
("Basic Life Support (BLS)", "[AHA / Red Cross / Local Body]", "[YYYY]"),
("Advanced Cardiac Life Support (ACLS)", "[Issuing Body]", "[YYYY]"),
("Certificate in Medical Ethics & Patient Rights","[University / CME Body]", "[YYYY]"),
("[Any additional course / workshop]", "[Organiser]", "[YYYY]"),
]
ct_data = [
[Paragraph(f"<b>{c[0]}</b>", body_bold),
Paragraph(c[1], small_gray),
Paragraph(c[2], small_gray)]
for c in certs
]
ct = Table(ct_data,
colWidths=[(PAGE_W-L_MAR-R_MAR)*0.53,
(PAGE_W-L_MAR-R_MAR)*0.32,
(PAGE_W-L_MAR-R_MAR)*0.15])
ct.setStyle(TableStyle([
("FONTSIZE", (0,0), (-1,-1), 9.5),
("LEFTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("ROWBACKGROUNDS",(0,0), (-1,-1), [WHITE, LGRAY]),
("LINEBELOW", (0,0), (-1,-2), 0.3, LINE),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(ct)
story.append(Spacer(1, 5*mm))
# ═════════════════════════════════════════════════════════════════════════════
# 6. ACADEMIC ACHIEVEMENTS & ACTIVITIES
# ═════════════════════════════════════════════════════════════════════════════
section("Academic Achievements & Extra-Curricular Activities")
achievements = [
"Secured [Rank / Position] in MBBS Final Professional Examination, [Year].",
"Presented a case report on '[Topic]' at the [Conference / CME Name], [Year].",
"Participated in the [Blood Donation / Health Awareness / Community Camp] organised by [Organisation].",
"Active member of the [Medical Students Association / Hospital Volunteer Team].",
"[Any prize, scholarship, award, or sports/cultural activity - add here].",
]
for a in achievements:
bullet(a)
story.append(Spacer(1, 5*mm))
# ═════════════════════════════════════════════════════════════════════════════
# 7. LANGUAGES
# ═════════════════════════════════════════════════════════════════════════════
section("Languages")
lang_data = [
[Paragraph("<b>English</b>", body_bold), Paragraph("Professional Proficiency", small_gray)],
[Paragraph("<b>[Language 2]</b>", body_bold), Paragraph("Native / Fluent", small_gray)],
[Paragraph("<b>[Language 3]</b>", body_bold), Paragraph("Basic / Conversational", small_gray)],
]
lt = Table(lang_data, colWidths=[(PAGE_W-L_MAR-R_MAR)*0.28, (PAGE_W-L_MAR-R_MAR)*0.72])
lt.setStyle(TableStyle([
("FONTSIZE", (0,0), (-1,-1), 9.5),
("LEFTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LINEBELOW", (0,0), (-1,-2), 0.3, LINE),
]))
story.append(lt)
story.append(Spacer(1, 5*mm))
# ═════════════════════════════════════════════════════════════════════════════
# 8. PERSONAL DETAILS
# ═════════════════════════════════════════════════════════════════════════════
section("Personal Details")
personal = [
["Date of Birth:", "[DD Month YYYY]", "Nationality:", "[Your Nationality]"],
["Gender:", "[Male / Female]", "Marital Status:", "[Single / Married]"],
["PMDC / Medical Council Reg. No.:", "[Registration Number]", "Available to Join:", "Immediately"],
]
pd_table = Table(personal,
colWidths=[(PAGE_W-L_MAR-R_MAR)*0.22,
(PAGE_W-L_MAR-R_MAR)*0.28,
(PAGE_W-L_MAR-R_MAR)*0.22,
(PAGE_W-L_MAR-R_MAR)*0.28])
pd_table.setStyle(TableStyle([
("FONTNAME", (0,0), (-1,-1), "Helvetica"),
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTNAME", (0,0), (2,-1), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9.5),
("TEXTCOLOR", (0,0), (0,-1), MGRAY),
("TEXTCOLOR", (0,0), (2,-1), MGRAY),
("LEFTPADDING", (0,0), (-1,-1), 4),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LINEBELOW", (0,0), (-1,-2), 0.3, LINE),
]))
story.append(pd_table)
story.append(Spacer(1, 5*mm))
# ═════════════════════════════════════════════════════════════════════════════
# 9. REFERENCES
# ═════════════════════════════════════════════════════════════════════════════
section("References")
ref_data = [
[Paragraph("<b>[Prof. / Dr. Referee Name 1]</b>", body_bold),
Paragraph("<b>[Prof. / Dr. Referee Name 2]</b>", body_bold)],
[Paragraph("[Designation, Department]<br/>[Hospital / University Name]<br/>"
"Email: ref1@example.com<br/>Phone: +00 000 000 0000", body),
Paragraph("[Designation, Department]<br/>[Hospital / University Name]<br/>"
"Email: ref2@example.com<br/>Phone: +00 000 000 0000", body)],
]
ref_table = Table(ref_data, colWidths=[(PAGE_W-L_MAR-R_MAR)/2]*2)
ref_table.setStyle(TableStyle([
("FONTSIZE", (0,0), (-1,-1), 9.5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("BACKGROUND", (0,0), (-1,-1), LGRAY),
("BOX", (0,0), (-1,-1), 0.5, LINE),
("LINEAFTER", (0,0), (0,-1), 0.5, LINE),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ref_table)
# ── Declaration ──────────────────────────────────────────────────────────────
story.append(Spacer(1, 8*mm))
story.append(HRFlowable(width="100%", thickness=0.5, color=LINE))
story.append(Spacer(1, 3*mm))
story.append(Paragraph(
"<i>I hereby declare that all the information provided above is true and correct to the best of my knowledge and belief.</i>",
S("Decl", fontName="Helvetica-Oblique", fontSize=9, textColor=MGRAY, leading=13, alignment=TA_LEFT)))
story.append(Spacer(1, 6*mm))
story.append(Paragraph(
"Date: _______________ Signature: _______________",
S("Sign", fontName="Helvetica", fontSize=9.5, textColor=BLACK, leading=14)))
# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=draw_bg, onLaterPages=draw_bg)
print(f"PDF saved: {OUTPUT}")