83 lines
2.3 KiB
Markdown
83 lines
2.3 KiB
Markdown
# badge-generator
|
|
|
|
Bulk-generates print-ready employee badge PDFs laid out for Avery `8395` adhesive name badges.
|
|
|
|
The generator is built around the sample badge you provided:
|
|
- employee photo cropped to fill the center frame without stretching
|
|
- auto-sized employee name in the black band
|
|
- auto-sized job title in the blue band, wrapped to two lines if needed
|
|
- two identical labels per employee, kept on the same 8-up sheet
|
|
|
|
## Avery 8395 layout
|
|
|
|
This project uses the standard 8-up Avery 8395 / 5395-compatible layout on US Letter:
|
|
- label size: `3.375" x 2.333"`
|
|
- sheet layout: `2 across x 4 down`
|
|
- default margins: about `0.688"` left/right and `0.594"` top/bottom
|
|
- default gaps: about `0.375"` horizontal and `0.187"` vertical
|
|
|
|
Those dimensions match common Avery-compatible template specs. Printers still vary, so the CLI includes `--left-adjust` and `--top-adjust` for calibration.
|
|
|
|
## Inputs
|
|
|
|
Photos go in a directory and should be named as:
|
|
- `firstnamelastname.png`
|
|
- `firstnamelastname.jpg`
|
|
|
|
Examples:
|
|
- `jaceyplace.jpg`
|
|
- `xylaensign.png`
|
|
|
|
The CSV must include:
|
|
- `title`
|
|
- either `name` or both `first_name` and `last_name`
|
|
|
|
Optional CSV columns:
|
|
- `prefix` for text before the name, like `Dr.`
|
|
- `suffix` for credentials after the name, like `MD` or `RN, BSN`
|
|
|
|
The easiest setup is:
|
|
- keep the photo filenames based on the actual person name only, like `puneetbraich.jpg`
|
|
- put `Dr.` / `MD` / `RN, BSN` in separate CSV columns so badge text changes do not affect photo matching
|
|
|
|
Example:
|
|
|
|
```csv
|
|
prefix,name,suffix,title
|
|
,Jacey Place,,Paraoptometric Technician
|
|
Dr.,Puneet Braich,MD,Ophthalmologist
|
|
,Brandi Lourdeau,"RN, BSN",Clinical Manager
|
|
```
|
|
|
|
## Install
|
|
|
|
```bash
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
python3 badge_generator.py sample-data/employees.csv photos -o output/badges.pdf
|
|
```
|
|
|
|
Optional branding and print calibration:
|
|
|
|
```bash
|
|
python3 badge_generator.py employees.csv photos \
|
|
-o output/badges.pdf \
|
|
--brand-text "CHITTICK\nEYE CARE" \
|
|
--logo-path assets/logo.png \
|
|
--left-adjust 0.02 \
|
|
--top-adjust -0.01
|
|
```
|
|
|
|
## Output behavior
|
|
|
|
- Each employee gets exactly `2` labels.
|
|
- The two labels are placed consecutively, so both copies stay on the same sheet.
|
|
- Each sheet holds `8` labels total, which means `4 employees per sheet`.
|
|
- The output is a print-ready multi-page PDF.
|