to select ↑↓ to navigate
Frappe Framework

Frappe Framework

Open in ChatGPT
Ask ChatGPT about this page
Open in Claude
Ask Claude about this page

Print Formats

Print Formats control how a DocType renders to PDF — invoices, quotations, delivery notes, anything you'd send a customer. Frappe ships defaults; you almost always want custom ones with your branding.

The three editors

Editor When to use
Standard Print Format Quick changes — pick fields, set the layout, no code
Print Designer Drag-and-drop visual editor — closest to Word/Canva, recommended
Custom Jinja Pixel-perfect HTML/CSS with Jinja variables — for complex layouts

Bundled as a separate app, Print Designer gives you a visual canvas. Drop in fields, tables, images, dynamic text. Save the format, attach it to a DocType. Output is HTML rendered to PDF by wkhtmltopdf or Chromium.

Jinja print formats

For full control, write HTML with Jinja:

<div class="invoice">
    <h1>Invoice {{ doc.name }}</h1>
    <p>Customer: {{ doc.customer_name }}</p>
    <table>
        {% for item in doc.items %}
            <tr><td>{{ item.item_code }}</td><td>{{ item.qty }}</td></tr>
        {% endfor %}
    </table>
    <p>Total: {{ frappe.format_value(doc.grand_total, "Currency") }}</p>
</div>

Letter Heads

The company logo / address block. Configure once in Letter Head, then any Print Format with "Print Heading" enabled renders it.

Default format per DocType

Set Print Settings → Print Style and DocType → Default Print Format so the right format opens automatically when users hit Print.

Email integration

When you send a document by email (the envelope icon), the chosen Print Format is rendered to PDF and attached. Email Templates can reference the same fields for the body.

Last updated 3 days ago
Was this helpful?
Thanks!