Export formats, and how each one is generated
Last updated: 13 August 2026
The Timetable Maker exports in four formats. They are not equivalent, and picking the wrong one is the most common cause of a disappointing download. This page documents exactly what each format contains, how it is produced, and where it falls short.
Every export is generated inside your own browser. Nothing is uploaded to a server, and no copy of your timetable is created anywhere but on your device. The mechanics of that are covered on where your timetable is stored.
Which format to choose
| Format | What it actually is | Best for | Can be re-imported? |
|---|---|---|---|
| PNG | A raster image of the grid | Sharing, phone wallpaper, pasting into a document | No |
| That same image placed on one A4 page | Printing, pinning to a wall | No | |
| CSV | A flat table of events, one row each | Spreadsheets, importing into other software | No |
| JSON | The complete saved state of your timetable | Backup, moving between browsers or devices | Yes |
The short version
JSON is the only format that survives a round trip. PNG and PDF are pictures, and CSV is a one-way summary. If you want to be able to keep editing a timetable later — on another machine, or after clearing your browser — export JSON and keep the file. Everything else is a final output, not a backup.
PNG
The PNG is produced by rendering the schedule grid to a canvas with html2canvas 1.4.1, then saving that canvas as a PNG. Specifics:
- Rendered at 2× scale, so the file is twice the on-screen pixel dimensions. This keeps text sharp when printed or viewed on a high-density display.
- The background is forced to solid white rather than inheriting the page background, so the image works on any surface you drop it onto.
- Only the grid itself is captured. The toolbar, footer, page heading and any advertising are excluded.
- The file is named
timetable.png.
The font used in the export is whichever script stack is active in Settings → Font. That stack is applied to the grid on screen, and the export captures what it sees — so what you see in the editor is what lands in the image.
Limits of PNG
- It is a bitmap. Text inside it is not selectable, not searchable and not editable.
- Zooming past 2× will look soft.
- If a web font has not finished downloading when you hit export, the grid may be captured in a fallback face. If your export looks wrong, reload the page, let it settle for a moment, and export again.
The PDF is built from the same 2× canvas, which is then placed into a document generated by jsPDF 2.5.1. Specifics:
- Page size is A4. Orientation is chosen automatically: landscape if the rendered grid is wider than it is tall, portrait otherwise.
- A 24-point margin is applied on all sides.
- The heading Time Table Maker by Success Minded is drawn at the top in 15pt Helvetica Bold.
- The grid image is scaled to fit within the remaining space, preserving its aspect ratio, and centred horizontally.
- The file is named
timetable.pdf.
Limits of PDF
- The PDF is always a single page. There is no pagination. A large timetable is scaled down to fit, not split across sheets.
- Because of that, a dense schedule — seven days at 15-minute intervals across a long day — can end up with small text. If yours prints too small, narrow the visible days or widen the interval before exporting, or print the PNG instead at a size you control.
- As with the PNG, the schedule is an embedded image. Text cannot be selected or searched in a PDF reader.
CSV
The CSV is generated directly from your event list, not from the rendered grid. It contains six columns, in this order:
| Column | Contents |
|---|---|
Day | Full English weekday name, e.g. Monday |
Title | The event title |
Start | Start time, formatted to your current 12 or 24-hour setting |
End | End time, same formatting |
Notes | The optional note field, empty if unused |
Color | The event colour as a hex value, e.g. #FF6B5C |
Rows are sorted by day of week first, then by start time. Every field is wrapped in double quotes, and any quote inside a value is escaped by doubling it, so titles containing commas or quotation marks stay intact. Lines end with CRLF.
The file is written as UTF-8 with a byte-order mark. That leading BOM is deliberate: without it, Microsoft Excel misreads accented and non-Latin characters when opening a CSV directly. With it, a timetable in Korean, Spanish or Arabic opens correctly on a double click.
Limits of CSV
- It cannot be re-imported. There is no CSV import path.
- It carries events only. Your settings — start and end of day, interval, time format, font, which days are visible — are not included.
- Times are written as display strings that follow your current 12/24-hour preference, so the same timetable exported twice under different settings produces different text in those columns.
- On the translated versions of the tool the six column headings are localised, but the values in the
Daycolumn are always full English weekday names. This is intentional — it keeps files portable between language versions — but it does mean a Spanish or Korean export contains English day names.
One difference worth knowing about
CSV and JSON contain every event you have created. PNG and PDF contain only what is drawn on the grid.
Usually those are the same set. An event that runs past the edge of your visible hours — starting before your day begins, or ending after it finishes — is drawn clipped to the window, so it still appears in a PNG or PDF, marked with a dashed edge to show it continues beyond the grid.
An event lying entirely outside your visible hours cannot be drawn at all, so it will be missing from PNG and PDF while still appearing in CSV and JSON. When that happens the tool now says so beneath the grid, with a count. Widen your start and end times in Settings to bring those events back into view before exporting.
JSON
The JSON export is a complete, indented copy of the timetable's saved state — the same structure held in your browser's storage. It is the only lossless format, and the only one the tool can read back in.
{
"events": [
{
"id": "elz4k9x2a7",
"title": "Organic Chemistry",
"day": "Monday",
"start": 570,
"end": 660,
"desc": "Lab block, room C2",
"color": "#0FB5A8"
}
],
"settings": {
"start": "07:00",
"end": "21:00",
"interval": 60,
"fmt": "24",
"font": "auto",
"days": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
}
}
Field reference
Each object in events:
| Key | Type | Notes |
|---|---|---|
id | string | Generated identifier, unique within the file |
title | string | Defaults to Untitled if left blank |
day | string | Full English weekday name |
start | number | Minutes from midnight, not a time string. 09:30 is 570 |
end | number | Same units. Must be greater than start |
desc | string | The note field, empty string if unused |
color | string | Hex value from the eight-colour palette |
The settings object:
| Key | Type | Accepted values |
|---|---|---|
start | string | First hour shown, HH:MM |
end | string | Last hour shown, HH:MM |
interval | number | Row size in minutes: 15, 30 or 60 |
fmt | string | "12" or "24" |
font | string | auto, latin, cjk, arabic, indic or cyrillic |
days | array | Which weekdays are visible, in display order |
Note that a multi-day event is stored as one separate event object per day, each with its own id. Adding a class that runs Monday, Wednesday and Friday creates three entries, not one recurring entry.
Importing a JSON file
Use Import JSON in the download menu. The file is checked for a top-level settings key and an events key; if either is missing you will be told the file is not a timetable JSON, and nothing changes.
Import replaces, it does not merge
A successful import overwrites your current timetable entirely. It does not combine the imported events with what is already on screen, and there is no undo. If the timetable currently open matters to you, export it first.
Because the format is plain, documented JSON, you can also generate these files from your own scripts — building a term timetable from a spreadsheet, for instance — and import the result. Keep start and end as minutes from midnight and the file will load.
If an export fails
PNG and PDF depend on two libraries loaded from a CDN. If either is still downloading when you press the button, you will see a short message saying the library is still loading — wait a second and try again. On a very slow or filtered connection those libraries may not arrive at all, in which case CSV and JSON still work, since they are built without any external code.
Anything else that looks wrong is worth reporting. Current defects and how they get fixed are listed on known issues, and fixes are recorded in the changelog.