用途:在 Frappe 中创建打印格式、邮件模板和文档模板,使用 Jinja 渲染并生成 PDF,配置信头用于品牌化。
主要能力:支持标准格式(开发者模式导出为 JSON、版本控制)与自定义格式(存于数据库、用户可改);可用 Print Format Builder 拖拽创建,或通过 awesomebar 新建 Jinja 打印格式。模板中可调用 Frappe Jinja API 获取数据(frappe.get_doc、frappe.get_all、frappe.get_list、frappe.db.get_value、frappe.db.get_single_value),进行格式化(frappe.format、frappe.format_date),访问会话与上下文(frappe.session.user、frappe.get_fullname、frappe.lang、_() 翻译),生成 URL(frappe.get_url)。支持 Jinja 过滤器(upper、truncate、striptags、safe、length、first、join、round、default、tojson)以及宏与模板继承。
使用方式:新建打印格式时设置唯一名称、关联目标 DocType、选择 Standard 与 Custom Format、Print Format Type 设为 Jinja,编写 Jinja HTML。邮件模板直接写 Jinja 文本。程序化生成 PDF 使用 frappe.get_print(as_pdf=True)、frappe.attach_print 附加文件、frappe.sendmail 发送带附件邮件。信头在 Letter Head 列表新建,上传 logo 与页眉图并设为默认。
适用场景:自定义单据打印布局、动态邮件内容、从文档生成 PDF、网页 Jinja 模板、品牌信头配置。
限制与注意:PDF 生成依赖 wkhtmltopdf;打印格式样式应使用内联样式,避免复杂 CSS;用户生成内容需用 |e 转义防 XSS;缺失字段用 {{ doc.field or '' }} 或条件判断处理;图片 URL 用 frappe.utils.get_url() 而非硬编码;子表用 {% for item in doc.items %} 访问;frappe.get_all 忽略权限,frappe.get_list 检查权限。模板语法错误、字段不匹配、权限问题等需按失败模式排查。应用级钩子与结构问题转 app-development,DocType 架构问题转 doctype-development。