Habit Tracker PDF Printable
Python script to generate monthly printable Habit Tracker
9/27/20251 min read
from reportlab.lib.pagesizes import A4, landscape
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
# Register font for compatibility
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiMin-W3'))
def create_light_theme_checkbox_printable(filename):
c = canvas.Canvas(filename, pagesize=landscape(A4))
width, height = landscape(A4)
# Colors (light theme)
header_color = colors.HexColor("#b3e5fc") # light cyan
day_bg = colors.HexColor("#e1f5fe") # very light cyan
grid_color = colors.HexColor("#bbbbbb")
# Header bar
c.setFillColor(header_color)
c.rect(0, height-2*cm, width, 2*cm, stroke=0, fill=1)
c.setFillColor(colors.black)
c.setFont("HeiseiMin-W3", 16)
c.drawCentredString(width/2, height-1.2*cm, "Habit Tracker – Month: ____________________")
# Table settings
left_margin = 2*cm
top_start = height - 3.5*cm
row_height = 1.2*cm
col_width = 0.7*cm
# Day headers (1–31)
for d in range(31):
x = left_margin + 4.5*cm + d*col_width
c.setFillColor(day_bg)
c.rect(x, top_start, col_width, row_height, stroke=0, fill=1)
c.setFillColor(colors.black)
c.setFont("HeiseiMin-W3", 8)
c.drawCentredString(x+col_width/2, top_start+0.35*cm, str(d+1))
# Habit rows (10 rows, blank habit column)
for i in range(10):
y = top_start - (i+1)*row_height
# Habit label space (blank, for user to write)
c.setStrokeColor(grid_color)
c.rect(left_margin, y, 3.5*cm, row_height, stroke=1, fill=0)
# Checkbox cells for days
for d in range(31):
x = left_margin + 4.5*cm + d*col_width
c.setStrokeColor(grid_color)
c.rect(x, y, col_width, row_height, stroke=1, fill=0)
# Draw small checkbox inside each cell
cb_size = 0.35*cm
cb_x = x + (col_width - cb_size)/2
cb_y = y + (row_height - cb_size)/2
c.rect(cb_x, cb_y, cb_size, cb_size, stroke=1, fill=0)
# Footer
c.setFont("HeiseiMin-W3", 9)
c.setFillColor(colors.black)
c.drawCentredString(width/2, 1*cm, "Created by Code2Compass ✦ For personal use")
c.showPage()
c.save()
# Generate light theme printable PDF with checkboxes
create_light_theme_checkbox_printable("/mnt/data/HabitTracker-Printable-Landscape-LightCheckbox.pdf")
"/mnt/data/HabitTracker-Printable-Landscape-LightCheckbox.pdf"