print-format
Installation
SKILL.md
Frappe Print Format Reference
Reference for designing Print Formats in Frappe v14+, aligned with the team's edu_quality conventions: self-contained formats (no letter_head / footer injection), wkhtmltopdf pinned as the PDF engine, dd-MM-yyyy date format, and Rs. instead of ₹ to dodge font issues.
Team conventions
These are the rules, not suggestions. New formats follow them; reviews flag deviations.
- Do NOT use
{{ letter_head }}or{{ footer }}. Every print format is self-contained: header (with logo/QR if needed), body, signature block — all inline in the template. The Letter Head DocType is not part of our print pipeline. - Pin
pdf_generator: "wkhtmltopdf"in the Print Format JSON. Don't rely on the system default; v15 introduced Chromium and the team has not adopted it. - Date format:
formatdate(doc.field, "dd-MM-yyyy")everywhere. No raw date rendering. - Currency:
fmt_money(amt, currency="INR") | replace("₹", "Rs.")or hardcodeRs.directly. The wkhtml fonts we ship don't reliably render₹; the team standard isRs.. - Margins
15.0all around,page_number: "Hide",standard: "Yes",print_format_type: "Jinja". moduleset to the module name. Files live at{app}/{module}/print_format/{slug}/{slug}.json.
When to use which type
Frappe supports four ways to define a print format: