A calendar that is arithmetic, not a lookup
Which weekday the 1st of a month falls on, and how many days that month has, are completely determined by the year and month. No timezone, no current date, no server. So the grid drawn here is derived from that pair alone and nothing else, which is why asking for March 2031 is exactly as reliable as asking for this month.
The one place the current date is consulted is the moment the page loads, purely to prefill the year and month dropdowns with something sensible. After that it is never read again. That single local read is a deliberate, documented compromise, because mixing local and UTC dates is a classic source of off-by-one-day bugs and this codebase has been bitten by it before.
The PDF itself is assembled in your browser with a document library that runs the same way in a browser as it does anywhere else, which is why the whole pipeline including the date maths can be tested properly rather than eyeballed.
Printing next month, or the whole year
- Choose a Range. Single month gives one page, Whole year (12 pages) gives twelve.
- Set the Year. Anything from 1 to 9999 is accepted.
- In single month mode, pick the Month from the dropdown.
- Set Week starts on to Sunday or Monday, whichever your part of the world uses.
- Choose Paper size, A4 or Letter, and Orientation, portrait or landscape.
- Tick Add a notes column if you want a blank eighth column beside each week.
- Check the live preview table, which redraws with every change. In whole year mode it shows the selected month only, with a note saying the PDF will carry all twelve.
- Click Generate PDF. The file is named for what you asked for, so a single month becomes calendar-august-2026.pdf and a full year becomes calendar-2026.pdf.
Print at 100 percent with scaling switched off. Page fitting is what turns a correctly sized A4 grid into a slightly shrunken one with uneven margins.
Whole weeks, padded ends, and variable row height
The grid always contains complete weeks. The days before the 1st and after the last are drawn as blank cells rather than being borrowed from the neighbouring months.
That means the number of rows varies. A 31 day month that begins on a Saturday spills into a sixth row. February 2026 is the opposite extreme: 28 days beginning on a Sunday, which with a Sunday start fills exactly four rows with no padding anywhere.
Row height is the available vertical space divided by however many rows that month needs, so a four row February prints with noticeably taller boxes than a six row March. If you are producing a matched set for a wall, that variation is worth knowing about before you print twelve pages.
The notes column costs width
Ticking the notes option does not squeeze an extra narrow strip in beside a fixed seven column grid. It changes the grid to eight equal columns across the same usable width.
On A4 portrait the usable width between the 36 point margins is a little over 523 points. Split seven ways that is about 74.8 points per day. Split eight ways it is about 65.4, so every day cell loses roughly an eighth of its width and the notes column is exactly as wide as a day. Row heights are untouched.
If your priority is room to write inside the day boxes rather than a separate notes strip, landscape without the notes column gives you far more space than portrait with it.
Related printables
For the arithmetic behind a date rather than a printed grid, Days Between Dates counts the span between two dates, and Week Number answers which ISO week a given date falls in, which no printed calendar here marks.
Other things worth printing on the same paper: Graph Paper Generator for squared and dotted sheets, Handwriting Worksheets for tracing practice, and Label Maker for a sheet of labels. Timesheet Calculator covers the hours side of a work month. The rest of the PDF set is on the PDF tools hub.

