What this tool does
Upload an existing Thermo King ServiceWatch PDF, edit any of its data in the browser, and download a new PDF that matches the original's look. No data leaves your browser.
The flow has 3 steps shown in the stepper at the top:
- Import PDF — pick a file. The app extracts the header fields, the data table, and the footer.
- Review & Download CSV — confirm what was extracted. Optionally download the table as CSV.
- Edit & Generate PDF — tweak any field or row, then click Generate PDF.
Don't have a PDF? Click Skip — start fresh with defaults on step 1.
Step 1 — Import a PDF
- Click Choose PDF.
- Pick a TK ServiceWatch report (the original WinTrac/ServiceWatch export, or a PDF previously generated by this tool).
- Click Import PDF.
If you closed the tab while working before, a yellow Resume / Discard banner appears here. Resume jumps back to where you left off; Discard wipes the saved state.
Step 2 — Review the extraction
Three panels show what was pulled from the PDF:
- Extracted header fields — the 10 named values from the top.
- Extracted table data — row count plus a 5-row preview.
- Extracted footer — the day-name/date/time line and the file path (which may be on two lines in the PDF; the app stitches them together).
Click Download CSV if you want to edit the table externally. Most people skip this and go straight to step 3.
Click Continue — Edit & Generate to move on.
Step 3 — Edit and generate
The form is pre-filled from the extraction. Three sections:
Header
Ten editable fields. Reset to template defaults restores the canonical Thermo King values.
CSV data
The data table is fully editable inline. See the Editor & suggestions tab for details.
Footer
- Day / date / time line — e.g.
Wednesday 05/06/2026 12:19. Click Use current date/time to fill from your computer's clock.
- File path — paths longer than ~36 characters are wrapped onto two lines automatically at the last directory separator.
When you're done, click Generate PDF. The browser downloads report-<timestamp>.pdf.
Editor and suggestions
Per-row controls
- Click any cell to edit it.
- ↑ / ↓ — move the row up / down.
- ⎘ — duplicate the row (insert a copy below).
- × — delete the row.
Adding rows
+ Add row at the bottom appends an empty row and focuses the new Time cell.
Resizable columns
Drag the right border of any column header to resize it. Column widths are saved with your other progress.
Suggestions panel
To the right of the table is a panel listing every unique value used in the Setpoint and Unit Operating Mode columns:
- Click a value to insert it into the focused cell.
- Click × to hide a value (e.g. typos you don't want offered).
Dropdown
Focusing a Setpoint or Unit Operating Mode cell opens a dropdown beneath it with all unique values for that column. Type to filter, ↑/↓ to highlight, Enter to apply, Esc to close.
Other CSV tools
- Upload CSV — replaces all rows. The CSV must have these 7 columns in order:
Time, Setpoint, Return Control, Discharge Control, Coil, Ambient, Unit Operating Mode.
- Treat first row as data — tick this if your CSV has no header row.
- Download CSV — saves the current (post-edit) table.
- Clear all — removes every row.
Auto-save and resume
Every change is saved to your browser's local storage within ~300 ms. Includes:
- Header and footer field values.
- The current row data.
- Column widths.
- Hidden suggestion values.
- Which step you were on.
If you reload, close, or come back tomorrow, a Resume banner appears on step 1. Click it to jump back to where you were. Click Discard to throw the saved state away.
Leave-page warning
If you try to close, refresh, or navigate away while you have rows in the editor (or are past step 1), the browser shows a Leave site? dialog. Click Stay to keep working, or Leave to abandon. (Your data is still in localStorage, so you can resume.)
Common issues
Logo missing in the generated PDF
You opened index.html via file://. Browsers block local image fetches. Use the deployed version, or run npm run serve locally.
"PDF.js is not loaded"
The PDF.js library failed to load from CDN. Check your network or content blockers, then reload.
"Please choose a CSV file first"
The table is empty. Click + Add row at least once, or upload a CSV.
Header field shows "(missing)" after import
The PDF's text segmentation didn't match the regex. Edit the field manually in step 3.
Reload doesn't pick up the new version
Hard reload with Cmd+Shift+R (Mac) or Ctrl+Shift+R (Windows/Linux).
For more, see TROUBLESHOOTING.md on GitHub.