Skip to content

nath54/cv_creator

Repository files navigation

CV_Creator — The Intelligent Resume Compiler

Python Version License: MIT Format: PDF Build: Success


The One-Page Resume Savior

CV_Creator is a solid, automated, and intelligent resume generator written in Python. It parses structured data and aesthetic layouts from human-readable YAML configuration files, and compiles them into a highly professional, pixel-perfect PDF.

Gone are the days of wrestling with Microsoft Word margins, misaligned bullet points, or having your resume awkwardly bleed onto a second page because of a single extra line. With its integrated dynamic auto-scaling engine, CV_Creator performs an iterative loop (binary search optimization) on font sizes and line heights to guarantee that your entire resume fits perfectly onto exactly one page, every single time.


System Architecture

The following diagram illustrates how CV_Creator separates data from style, maps YAML configurations to native Python classes, and runs the iterative fitting loop to output a beautiful single-page PDF.

flowchart TD
    subgraph Input Configurations
        D[data_en.yaml / data_fr.yaml] -->|Data Fields| L[lib_config.py]
        S[style.yaml] -->|Styling Rules| L
    end

    subgraph Data Mapping
        L -->|Recursively Maps| CD[ConfigData Object]
        L -->|Recursively Maps| CS[ConfigStyle Object]
    end

    subgraph Compiler & Auto-Scaling Loop
        CD & CS -->|Inject| CC[CVCreator FPDF2]
        CC -->|1. Init scale=1.0| FL{Fitting Loop}
        FL -->|2. Render Probe| PB[Probe In-Memory PDF]
        PB -->|3. Check Page Count| PC{Pages > 1?}
        PC -->|Yes| SC[Scale down: scale * 0.95]
        SC --> FL
        PC -->|No or scale < 0.60| RO[Final Render]
    end

    subgraph Output
        RO -->|Save| PDF[generated_cv.pdf]
        PDF -->|Validate Text| VF[verify.py PDFMiner]
    end

    style CC fill:#c0504d,stroke:#333,stroke-width:2px,color:#fff
    style FL fill:#e1daee,stroke:#333,stroke-width:1px
    style PDF fill:#2ecc71,stroke:#333,stroke-width:2px,color:#fff
Loading

Key Features

  • Separated Concerns: Keep your content (data.yaml) completely separate from your styling rules (style.yaml). Update your job descriptions without breaking the layout!
  • Intelligent Auto-Scaling: Built-in fit_to_one_page() method. If your resume exceeds one page, the generator automatically scales down font sizes and spacing recursively (down to a safety floor of 0.60) until everything fits beautifully on a single sheet.
  • Premium Multi-Column Layout: Renders a gorgeous, asymmetrical layout featuring:
    • An elegant contact, links, and personal interests sidebar with a soft-filled background (#E1DAEE).
    • A clean main column for education and technical skills.
    • A dual-column bottom showcase for professional experiences, academic projects, and personal repositories.
  • Language & Translation Ready: Built-in label mapping support (labels block) to seamlessly generate resumes in both English and French from separate data configs using the same core style engine.
  • Built-In PDF Verification: An independent verification tool (verify.py) utilizing pdfminer to extract and print raw text from the compiled PDF, ensuring searchability and screen-reader compatibility (ATS optimization).

Project Structure

cv_creator/
├── cv_creator.py       # Core PDF Compiler & Layout Generator (FPDF2)
├── verify.py           # PDF Parser to verify if the Generated PDF is valid and usable in automated systems
├── lib_config.py       # YAML parser, recursive mapper, and CLI handler
├── style.yaml          # Universal style settings (fonts, margins, layout ratios)
├── data_template.yaml  # English content (Profile, education, projects, skills)

Installation & Setup

  1. Clone the Repository:

    git clone https://github.com/nath54/cv_creator.git
    cd cv_creator
  2. Create and Activate a Virtual Environment:

    # Windows
    python -m venv .venv
    .venv\Scripts\activate
    
    # macOS/Linux
    python3 -m venv .venv
    source .venv/bin/activate
  3. Install Required Dependencies:

    pip install -r requirements.txt

Usage Guide

You can run CV_Creator via the command line. The program accepts command-line arguments to specify custom data and style configurations.

1. Generate a CV (Default Auto-Fitting)

python cv_creator.py --data_config data_template.yaml --style_config style.yaml -o cv_template.pdf

2. Verify PDF Layout & ATS Compatibility

Extract the raw text from your compiled PDF to verify that all text is correctly indexed and fully searchable:

python verify.py cv_template.pdf

Customizing Configurations

Content Configuration (data_template.yaml)

Add or edit your experiences, projects, and skills. Links are clickable in the generated PDF!

first_name: Jean
last_name: Dupont
tagline: IT Technician Student
email: [EMAIL_ADDRESS]
links:
  - name: GitHub
    url: https://github.com/jean_dupont
experience:
  - title: Internship
    organization: Big Bang
    dates: May - August 2026
    description: Software development for the Big Bang company.

Style Configuration (style.yaml)

Fine-tune margins, change page formats, or adjust column width ratios with absolute ease:

page:
  size: A4
  margin:
    top: 10.0
    bottom: 10.0
    left: 10.0
    right: 10.0
layout:
  columns: 2
  ratio: 0.35  # Left sidebar takes 35% of the total page width

License

This project is licensed under the MIT License. Feel free to fork, customize, and compile your way to your dream job!

About

Easily create your CV / Resume with a only your data in a YAML file (you can just update the given template)

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages