Odoo 17 API发票邮件附件生成及自动配置技术咨询
解决方案
一、通过Odoo API直接获取发票PDF的Base64编码
Odoo内置了报表渲染API,能直接生成发票PDF并返回Base64格式数据,无需手动处理文件编码。你可以调用report模型的render_qweb_pdf方法:
API调用示例
{ "jsonrpc": "2.0", "method": "call", "params": { "service": "object", "method": "execute_kw", "args": [ "{{db}}", "{{uid}}", "{{password}}", "report", "render_qweb_pdf", ["account.report_invoice", [17]] // 第一个参数是发票报表的XML ID,第二个是目标发票ID列表 ] } }
返回结果说明
调用后返回的result[0]就是PDF文件的Base64编码字符串,可直接填入ir.attachment.create的datas字段,无需额外编码处理。
二、配置Odoo自动添加发票附件(无需手动API处理)
如果不想通过API手动创建附件,可通过以下两种方式让Odoo自动处理:
1. 修改邮件模板,自动包含PDF附件
打开Odoo后台设置 > 技术 > 邮件 > 邮件模板,找到发票对应的邮件模板(通常是account.email_template_edi_invoice):
- 编辑模板,切换到附件标签页
- 在动态附件区域点击添加,选择报表,再选中发票报表
account.report_invoice - 保存模板后,后续发送发票邮件时,系统会自动生成PDF并作为附件添加
2. 用自动化动作触发自动添加附件
如果需要按特定条件(比如发票状态变为已验证时)自动添加附件:
- 打开设置 > 自动化 > 自动化动作,新建动作
- 模型选择
account.move(发票模型) - 触发条件设为“创建后”或“字段值更新”(比如监控
state字段变为posted) - 在动作标签页选择“执行Python代码”,添加以下代码:
import base64 from odoo import models # 生成PDF并创建附件 pdf_content, _ = self.env.ref('account.report_invoice').render_qweb_pdf([self.id]) self.env['ir.attachment'].create({ 'name': f"Invoice_{self.name}.pdf", 'type': 'binary', 'datas': base64.b64encode(pdf_content).decode(), 'res_model': 'account.move', 'res_id': self.id, 'mimetype': 'application/pdf' })
- 保存动作后,符合条件的发票会自动生成并添加PDF附件,发送邮件时会自动包含该附件
内容的提问来源于stack exchange,提问作者Kamil Wolski
相关产品推荐
相关产品推荐

