A small Python tool that generates a printable yearly bullet journal as a PDF. It creates a front page, monthly overview and notes pages, weekly planning pages, and then merges everything into one bullet_journal.pdf file.
- Python
- ReportLab
- pypdf
- Pillow
- python-dateutil
- Generates a complete journal for a selected year
- Includes monthly and weekly calendar pages
- Supports English and German labels
- Adds configurable birthdays, holidays, anniversaries, and icons
- Exports the journal as an A4 PDF
Clone or download the project, open a terminal in the project folder, and create a virtual environment:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtOn Windows, activate the environment with:
.venv\Scripts\activateRun the script from the project root:
python3 main.pyThis creates a bullet journal for the default year 2026.
To generate a journal for another year, pass the year as an argument:
python3 main.py 2027The generated file is saved as:
bullet_journal.pdf
Intermediate monthly and weekly PDF files are stored in the folders inlay_month, inlay_week, and inlay_front.
Open constants.py to adjust the journal content.
Change the language:
LANG = "en" # English
LANG = "de" # GermanAdd personal dates to IMPORTANT_DATES:
[01, 01, "Birthday", "cake.png", 2000, ["week", "month"]]The values represent:
[day, month, label, icon, reference year, visible views]
Available icons are stored in the icons folder. An empty icon value displays the event as plain text.
main.py Starts the complete PDF generation
constants.py Language settings and important dates
page_front.py Creates the front page
page_month.py Creates monthly pages
page_week.py Creates weekly pages
page_merge.py Merges all generated PDFs
helper.py Calendar and date helper functions
structure.py Font, folder, and output paths
Deniz Inan
