You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据模型字段值动态设置Odoo qweb-pdf报表margin-top值

如何根据字段值在Odoo qweb-pdf报表中设置margin-top值

需求场景:模型存在可配置数值字段ab,需要实现动态上边距配置:字段值为N时,报表对应位置的margin-top为Ncm,例:字段值为4时边距4cm,字段值为7时边距7cm。

根据你要设置的边距类型,选对应方案即可:

  • 方案1:设置报表内容区的动态上边距(最常用,兼容单/多单据批量打印)
    直接在报表内容的最外层包裹标签上,用qweb的动态属性绑定语法拼接内联样式即可,这是稳定性最高的写法,不会被wkhtmltopdf转义失效:
<template id="your_custom_report_template">
  <t t-call="web.html_container">
    <t t-foreach="docs" t-as="doc">
      <!-- 单条记录的内容外层设置动态边距 -->
      <div t-att-style="'margin-top: %scm;' % doc.ab" class="page">
        <!-- 原有报表内容,比如示例文本 -->
        <p>Hello</p>
        <!-- 其余报表业务内容 -->
      </div>
    </t>
  </t>
</template>

注意要给ab字段加兜底值,避免字段为空时样式异常,可以在报表的_get_report_values方法里提前处理默认值,比如字段为空时默认取2(对应2cm边距)。不要直接在style属性里内嵌<t t-esc="doc.ab"/>拼接单位,这种写法在PDF渲染时大概率会被HTML转义,导致样式不生效。

  • 方案2:设置PDF页面全局的动态上边距
    如果你要调整的是PDF打印纸张本身的物理上边距,而非内容块的边距,需要动态生成纸张格式配置传入模板:
    首先在报表对应的渲染模型里重写取值方法,注意Odoo纸张配置的边距单位是像素,1cm约等于28.35像素,要做单位转换:
from odoo import models

class CustomReportRender(models.AbstractModel):
    _name = 'report.your_module.your_custom_report_template'

    def _get_report_values(self, docids, data=None):
        docs = self.env['your.target.model'].browse(docids)
        # 取当前打印单据的ab值,多单据批量打印建议统一取第一个值,因为单个PDF只能用一套纸张配置
        margin_top_cm = docs[:1].ab or 2
        # 复制默认A4纸格式,动态修改上边距
        dynamic_paperformat = self.env.ref('report.paperformat_a4').copy({
            'margin_top': margin_top_cm * 28.35,
            'name': f'Dynamic A4 margin {margin_top_cm}cm'
        })
        return {
            'docs': docs,
            'paperformat_id': dynamic_paperformat.id,
        }

然后在模板里绑定动态传入的纸张格式即可:

<template id="your_custom_report_template">
  <t t-call="web.html_container" t-att-paperformat="paperformat_id">
    <t t-foreach="docs" t-as="doc">
      <div class="page">
        <p>Hello</p>
        <!-- 其余报表内容 -->
      </div>
    </t>
  </t>
</template>

踩坑提示:批量打印多张ab值不一致的单据时,方案2会因为整个PDF只能加载一套纸张配置,导致所有单据都用同一个边距,这种场景必须用方案1给每个单据的内容块单独设边距。

内容的提问来源于stack exchange,提问作者user17707295

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:01:07