用途:在 Frappe v14/v15/v16 中创建或修改打印格式、以编程方式生成 PDF、配置 Letter Head、使用 Print Designer(v15+)、实现分页与横向布局,以及构建报表打印格式。不适用于通用 Jinja 模板(邮件、门户)、客户端脚本 UI 逻辑和 Web 视图。
主要能力:区分四种打印格式类型——Standard(按 DocType 字段自动布局)、Jinja(服务端 Jinja2 + wkhtmltopdf,需 custom_format=1)、JS Template(仅用于 Query/Script Report,使用 {%= %} 微模板)、Print Designer(v15+,WeasyPrint,可视化拖拽)。Jinja 上下文提供 doc、meta、layout、letter_head、footer、print_settings、frappe。Letter Head 支持 Image/HTML 来源,content 与 footer 支持带 doc 上下文的 Jinja,footer 仅在 PDF 输出显示。PDF 生成可用 frappe.utils.pdf.get_pdf 与 frappe.utils.print_format.download_pdf,并提供 download_pdf、download_multi_pdf 下载端点。v15+ 可选 Chrome 引擎(pdf_generator = "chrome"),v14 固定 wkhtmltopdf。内置打印 CSS 类包括 .print-format、.print-format.landscape、.page-break、.hidden-pdf、.visible-pdf。可通过 hooks.py 的 pdf_header_html、pdf_body_html、pdf_footer_html 注入页眉页脚,并注册自定义 Jinja 过滤器与方法。
使用方式:Jinja 打印格式中直接使用 {{ doc.field }} 与过滤器(如 global_date_format、fmt_money);报表打印格式使用 {%= %} 语法;应用内随附打印格式需在 JSON 中设置 standard = "Yes"、module 与 custom_format = 1。
限制与注意:切勿混用 Jinja {{ }} 与 JS {%= %};不要在模板循环中调用 frappe.get_doc();不要把复杂业务逻辑放入模板;不要硬编码页面尺寸;Print Designer 仅 v15+ 可用;避免在模板中嵌入大体积 base64 图片。各版本兼容性以资料中的矩阵为准。