Print a quotation PDF: file naming, orientation and page layout
Print the quotation table to a PDF in the app, with the filename, orientation, page packing and summary page you expect.
The Print Quotation action generates the PDF entirely inside the app (no server job) and downloads it as design_quotation_DD-MM-YYYY.pdf, with the date being the day of export — so two exports on the same day produce the same filename and the browser will suffix duplicates. The quotation ID in the printed table is a placeholder on screen and is only filled in when you download/print, so the PDF carries the generated ID. Page orientation follows the quotation print preference (portrait gives 210x297, landscape 297x210), and a summary page is included when the summary-page preference is on. Two sibling exports often confused with it: the 'detailed snapshot' export downloads a CSV named design_quotation_detailed.csv (not a PDF), and the cost-price quotation variant reprints the table using cost prices — it temporarily flips the quotation into cost-price mode and disables separate-tax while printing, then restores the setting. Pricing quotation downloads are exempt from approval/lock gating, but still run through the active-sales-channel and violations/issues checks, so 'I clicked print and nothing happened' usually means one of those two gates blocked it with a toast. Any open side panel is hidden automatically before printing; that is expected, not a glitch.
'Print PDF' on the quotation toolbar renders the current table to 'design_quotation_<date>.pdf'. Orientation comes from the 'Print PDF Orientation' preference: landscape (297x210 mm, default) or portrait (210x297). Pages are packed by accumulated row height; the logo header and project sub-header appear only on the first page, while column names repeat on pages that still contain item rows. Each section's footer rows (price/discount/tax/total) are pinned to the section's last item row — the engine will move the whole group to the next page rather than orphan a total, and if the pinned group is taller than a page it proportionally compresses those rows to fit, which can make footer text look squeezed on very long sections. A single row taller than a page is clipped to page height. If the 'Summary Page' preference is enabled, a summary is appended after the table; it can run to more than one page, and the table's page numbering continues after it. Page numbers print bottom-right. The PDF is produced client-side and downloads directly (no queue), so 'PDF stuck' complaints are usually browser download blocking, whereas XLSX goes through a generation step. The same rendering runs on our servers for automated exports, so backend PDFs match the in-app print exactly.