This repository generates a clean, one-page PDF resume from structured data.
This is a small Python + ReportLab tool that turns a resume JSON file into a print-ready, one-page PDF.
- Windows executable:
resume-generator.exe - Python script:
resume_generator.py - Example input / template JSON:
sample_input.json
ATS = Applicant Tracking System (software used by companies/recruiters to parse, search, and filter resumes). The generator aims for ATS-friendlier output.
The layout is designed to be optimized for automated systems to extract:
- Single-column, top-to-bottom flow
- Deterministic, predictable formatting for consistent parsing
- Left-aligned dates (no right-aligned columns)
- ASCII bullets (
-) instead of Unicode bullets - Labeled contact lines (e.g.,
Email: ...) to reduce ambiguity
Note: no PDF format can guarantee perfect parsing across every ATS. These choices are generally safer than heavily visual or multi-column layouts.
If you have a packaged executable (for example resume-generator.exe), you can run it from PowerShell.
- Put these files in the same folder:
resume-generator.exesample_input.json(edit it to match your resume)
- Open PowerShell in that folder.
- Run:
.\resume-generator.exe --data .\sample_input.json --output .\resume_output.pdfThe JSON file is expected to be an object with these keys (all optional):
name,title,location,phone,email,website,linkedin,github(strings)summary(string)skills(array of strings)experience(array of objects:{ company, role, dates, bullets[] })projects(array of objects:{ name, meta, bullets[] })education(array of objects:{ degree, school, dates })certifications(array of strings)
If a field/section is missing or empty, it will be skipped (not rendered) in the PDF.
resume_generator.pyloads the JSON file you pass via--dataand builds aResumeDataobject.- The script uses ReportLab’s
Canvasto draw text and section dividers onto a letter-sized page. - It wraps long lines so content fits within the margins.
- It saves a single-page PDF.
Run with your own input/output filenames:
python resume_generator.py --data <your_resume.json> --output <your_resume.pdf>Example (using the included sample input):
python resume_generator.py --data sample_input.json --output resume_output.pdfOptional: generate a more visually aligned version (for comparison):
python resume_generator.py --data sample_input.json --style pretty --output resume_sample_pretty.pdfThis writes resume_output.pdf (or your chosen --output) to the repository root.
--output <path>: output PDF path (default:resume_output.pdf)--data <path>: JSON file with resume content (required)--style <ats|pretty>: layout style (default:ats).
- Download and install Python 3.10+ from https://www.python.org/downloads/
- During install, check “Add python.exe to PATH”.
- Verify in PowerShell:
python --version
pip --versionIf python isn’t found, re-run the installer and enable PATH. You may also need to disable the Microsoft Store “App execution alias” for Python in Windows settings.
From the repository root:
python -m venv .venv
.\.venv\Scripts\Activate.ps1If PowerShell blocks activation:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
.\.venv\Scripts\Activate.ps1python -m pip install --upgrade pip
pip install -r requirements.txtFrom the repo root (with your venv activated):
pip install pyinstaller
pyinstaller --onefile --name resume-generator resume_generator.pyThe executable will be created at:
resume-generator.exe
Run it like this (you still pass a JSON file as input):
.\resume-generator.exe --data sample_input.json --output resume_output.pdfpiporpythonnot recognized: Python is not on PATH. Reinstall Python and select “Add to PATH”.- Activation blocked: run
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedonce, then re-activate. - PDF not updating: ensure you are running from the repository root and opening the newest output file.
- Page size is US Letter.
- Fonts default to built-in PDF fonts (Helvetica). The script includes a best-effort attempt to use Inter if
Inter-Regular.ttfandInter-Bold.ttfare present, but it works without them.