[{"data":1,"prerenderedAt":167},["ShallowReactive",2],{"doc-\u002Ftroubleshooting\u002Fpdf-not-generating":3},{"id":4,"title":5,"body":6,"description":157,"edit":158,"extension":159,"meta":160,"navigation":161,"path":162,"seo":163,"stem":164,"vertical":158,"weight":165,"__hash__":166},"content\u002Ftroubleshooting\u002Fpdf-not-generating.md","PDF not generating",{"type":7,"value":8,"toc":146},"minimark",[9,17,22,30,43,46,49,53,72,79,83,90,93,96,100,103,106,110,117,128,132,139],[10,11,12,16],"p",{},[13,14,15],"code",{},"POST \u002Fv1\u002Freports"," returned 200 but the PDF is blank, or the dashboard's\n\"Download report\" button produces a file you cannot open. The five\ncommon causes, in descending order of probability:",[18,19,21],"h2",{"id":20},"_1-wrong-date-range","1 · Wrong date range",[10,23,24,25,29],{},"The most common cause: the requested period contains ",[26,27,28],"strong",{},"no measurements",".\nThis happens when:",[31,32,33,37,40],"ul",{},[34,35,36],"li",{},"The site was created on day N and the report is for day N − 7.",[34,38,39],{},"The device on which the report is based was not yet provisioned.",[34,41,42],{},"The site's timezone is set to UTC and the user asked for a\n\"yesterday\" report in their local timezone that has not started yet\nin UTC.",[10,44,45],{},"The dashboard refuses to issue a report with no measurements with a\nmodal warning. The API returns the report anyway — empty — because we\nhave inadvertently broken automation in the past by being too clever\nabout this. The header pages render; the data pages are empty.",[10,47,48],{},"Fix: widen the date range and re-issue.",[18,50,52],{"id":51},"_2-wrong-timezone","2 · Wrong timezone",[10,54,55,56,59,60,63,64,67,68,71],{},"PDF reports render in the ",[26,57,58],{},"site's"," timezone, not the ",[26,61,62],{},"caller's","\ntimezone. A site in ",[13,65,66],{},"Europe\u002FBratislava"," will render\n",[13,69,70],{},"2026-05-17 00:00 → 2026-05-17 24:00"," local time, regardless of the\ncaller's IP.",[10,73,74,75,78],{},"If the day boundaries are wrong, edit the site's timezone in\n",[13,76,77],{},"Site → Settings → Timezone",". Existing reports do not retro-fix; you\nhave to re-issue.",[18,80,82],{"id":81},"_3-missing-devices-in-the-period","3 · Missing devices in the period",[10,84,85,86,89],{},"If the report template is HACCP and the site has three devices, but\nonly two have data in the period, the report by default shows the third\ndevice as ",[26,87,88],{},"\"OFFLINE — no data\""," rather than omitting it. An inspector\nwants to see the third device exists and was supposed to report.",[10,91,92],{},"If you removed a device during the period, the report shows the old\ndevice with a \"REMOVED\" stripe through it.",[10,94,95],{},"This is correct behaviour; not a bug. If you want a clean report,\nremove the device before the period starts.",[18,97,99],{"id":98},"_4-pdf-service-down","4 · PDF service down",[10,101,102],{},"The PDF rendering runs in a separate container (Chromium-based). It\noccasionally crashes after a memory leak in the chart library and\nrestarts. Symptom: the dashboard's \"Download\" button spins forever; the\nAPI call hangs and times out at 30 s.",[10,104,105],{},"The service auto-restarts within 60 s. Retry. If it fails twice in a\nrow, file a ticket.",[18,107,109],{"id":108},"_5-browser-blocking-the-download","5 · Browser blocking the download",[10,111,112,113,116],{},"Chrome and Firefox occasionally block automatic downloads from new\ndomains. Symptom: the dashboard reports ",[13,114,115],{},"Report ready"," but no file\ndownloaded.",[10,118,119,120,123,124,127],{},"Look for the download icon in the URL bar, or ",[13,121,122],{},"Downloads → Recent",".\nAllow downloads from ",[13,125,126],{},"opensense.murzin.digital"," once and the issue\ngoes away.",[18,129,131],{"id":130},"what-to-do-if-the-inspector-is-tomorrow","What to do if the inspector is tomorrow",[10,133,134,135,138],{},"A more direct workaround: open the dashboard, set the time range to\nlast month, screenshot each chart, ",[26,136,137],{},"email it to yourself"," as a\nsingle-page PDF via your printer's \"Save as PDF\". The PDF report is\nnicer but the auditor accepts a screenshot as long as it bears the\nsite name and the URL.",[10,140,141,142,145],{},"For chronically time-sensitive deployments, configure a ",[26,143,144],{},"monthly\nreport subscription",": the dashboard pre-renders the report on the 1st\nof each month at 02:00 site-local and emails the PDF to the configured\nrecipients. It is already in the inbox before the inspector arrives.",{"title":147,"searchDepth":148,"depth":148,"links":149},"",3,[150,152,153,154,155,156],{"id":20,"depth":151,"text":21},2,{"id":51,"depth":151,"text":52},{"id":81,"depth":151,"text":82},{"id":98,"depth":151,"text":99},{"id":108,"depth":151,"text":109},{"id":130,"depth":151,"text":131},"Inspector tomorrow, report empty",null,"md",{},true,"\u002Ftroubleshooting\u002Fpdf-not-generating",{"title":5,"description":157},"troubleshooting\u002Fpdf-not-generating",440,"z53cA6NcGQI67cb7wppqS4OoHi0WYWNLgeOP6W67hx0",1779022955446]