如何在Odoo中实现打印带"Duplicate Report"标识的重复QWeb报表?
实现QWeb报表打印副本时显示"Duplicate Report"标识的方案
要实现点击"Print Duplicate"按钮时在报表顶部显示副本标识,核心思路是给报表传递一个"是否为副本"的参数,然后在QWeb模板中根据这个参数条件渲染标识文本。具体步骤如下:
1. 修改Python按钮方法,传递副本标识参数
更新你的print_duplicate_report方法,通过report_action的data参数把is_duplicate标志传递给报表:
def print_duplicate_report(self): return self.env.ref('token_management.report_token_receipt').report_action( self, data={'is_duplicate': True} # 传递副本标识参数 )
2. 确保报表上下文能接收并传递该参数
如果你的报表有对应的抽象模型(继承自models.AbstractModel的报表类),需要重写_get_report_values方法,把传递的参数注入到模板上下文里:
from odoo import models, api class ReportTokenReceipt(models.AbstractModel): _name = 'report.token_management.report_token_receipt' _inherit = 'report.report_qweb_html' # 对应QWeb报表的父类 @api.model def _get_report_values(self, docids, data=None): # 调用父类方法获取基础上下文 report_values = super()._get_report_values(docids, data=data) # 注入副本标识参数,默认设为False防止正常打印时出错 report_values['is_duplicate'] = data.get('is_duplicate', False) if data else False return report_values
如果之前没有自定义报表类,你需要创建这个类来对接参数传递逻辑。
3. 修改QWeb模板,添加条件渲染的副本标识
在你的QWeb报表模板(report_token_receipt对应的XML文件)的顶部位置,添加一个条件显示的区块:
<template id="report_token_receipt"> <t t-call="web.html_container"> <t t-foreach="docs" t-as="doc"> <!-- 新增副本标识区块 --> <t t-if="is_duplicate"> <div style="text-align: center; font-size: 28px; font-weight: bold; color: #dc3545; margin-bottom: 30px; text-transform: uppercase;"> *Duplicate Report* </div> </t> <!-- 原报表内容 --> <div class="page"> <!-- 你的报表原有内容... --> </div> </t> </t> </template>
这里的样式可以根据需求调整:比如颜色、字体大小、位置,甚至可以添加斜体、下划线或者水印效果(如果需要更醒目的标识)。
测试验证
做完以上修改后,升级你的模块,点击"Print Duplicate"按钮,报表顶部就会显示"Duplicate Report"的红色加粗标识;而正常打印报表时(比如原打印按钮),这个标识不会出现。
内容的提问来源于stack exchange,提问作者Faraz
相关产品推荐
相关产品推荐

