SuperAPI AI 工具集

frappe-printing-templates

办公与效率

查看项目

更新于 10-15 16:35

技能介绍

用途

Frappe Printing & Templates 用于在 Frappe 框架中创建打印格式(Print Format)、邮件模板和文档模板,全部基于 Jinja 模板引擎。它适合为指定 DocType 定制打印布局、构建带动态内容的邮件模板、从文档生成 PDF、在网页中使用 Jinja 模板,以及配置信头(Letter Head)用于品牌展示。

主要能力

  • 创建 Jinja 打印格式:通过 awesomebar 新建 Print Format,设置唯一名称、关联目标 DocType、选择标准(Standard)或自定义(Custom)格式、设置 Print Format Type 为 Jinja,并编写 Jinja HTML。
  • 格式类型选择:标准格式(开发者模式,保存为 JSON,版本受控,用户不可自定义)、Print Format Builder(拖拽式 UI,存于数据库,用户可自定义)、自定义 HTML(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 动态渲染收件人、订单信息、明细列表和总计。
  • 程序化生成 PDF:使用 frappe.get_print(as_pdf=True)生成 PDF 内容,frappe.attach_print 附加到文档,frappe.sendmail 作为附件发送。
  • 配置信头:在 Letter Head 列表中新建,上传公司 logo 和页眉图片,设为公司默认,打印格式自动显示。
  • 使用 Jinja 过滤器:upper、truncate、striptags、safe、length、first、join、round、default、tojson 等。
  • 模板继承与宏:通过 macros 定义可复用片段,并在打印格式中导入使用。

使用方式

  1. 选择格式类型(标准 / Print Format Builder / 自定义 HTML)。
  2. 通过 awesomebar 新建 Print Format,设置名称、DocType、Standard、Custom Format、Print Format Type = Jinja,编写 Jinja HTML。
  3. 在模板中调用 Frappe Jinja API 获取数据、格式化字段、处理会话与翻译。
  4. 构建邮件模板,使用 Jinja 动态渲染内容。
  5. 使用 frappe.get_print、frappe.attach_print、frappe.sendmail 程序化生成和发送 PDF。
  6. 配置 Letter Head 并设为默认。
  7. 使用 Jinja 过滤器、宏和模板继承。

适用场景

  • 为 Frappe 文档创建自定义打印格式。
  • 构建带动态内容的邮件模板。
  • 从文档生成 PDF。
  • 在网页中使用 Jinja 模板。
  • 配置信头用于品牌展示。
  • 使用 Print Format Builder。

限制与注意事项

  • 需要提供目标 DocType、布局要求(字段、表格、页眉)、格式类型(标准或自定义)、信头/品牌要求、PDF 生成需求。
  • 模板语法错误需检查 Jinja 分隔符({{ }}、{% %})和未闭合块。
  • 字段未渲染需核对字段名与 DocType schema,检查子表访问方式。
  • PDF 生成失败需检查 wkhtmltopdf 安装和 Jinja 有效性。
  • PDF 样式问题应使用内联样式,避免复杂 CSS,先在 Print View 测试。
  • 权限错误需区分 frappe.get_all(无权限检查)与 frappe.get_list。
  • 应使用真实数据测试,优雅处理缺失字段({{ doc.field or '' }} 或 {% if doc.field %})。
  • 图片使用 frappe.utils.get_url(),不要硬编码 URL。
  • 用户生成内容使用 {{ value | e }} 防止 XSS。
  • 保持样式内联,PDF 生成器不支持外部 CSS。
  • 常见错误包括:Jinja 语法错误、缺少过滤器、硬编码 URL、子表访问错误、复杂 CSS、未处理 None 值。
  • 应用级 hooks 和结构问题应转至 frappe-app-development;DocType schema 问题应转至 frappe-doctype-development。
  • 参考资料:references/jinja.md(Jinja 模板与 Frappe Jinja API)、references/printing.md(打印格式与 PDF 生成)。