如何在Odoo报表所有页面添加水印?当前代码仅首页可见
解决Odoo报表水印仅显示在第一页的问题
遇到这个问题太常见了,本质是默认的HTML元素不会自动在分页后重复渲染。下面给你两种可靠的解决方案,适配不同Odoo版本和PDF渲染引擎:
方案一:使用CSS @page 背景图(推荐)
这种方法利用PDF渲染引擎的页面背景特性,让水印自动出现在每一页:
- 在你的QWeb报表模板中,添加动态生成的样式规则:
<style type="text/css"> @page { /* 保留原有报表的边距设置,如果有的话 */ margin: 2cm; /* 设置水印背景 */ background-image: url('data:image/png;base64,{{ doc.company_id.report_header_logo }}'); background-position: center center; background-repeat: no-repeat; background-size: 350px auto; /* 根据需求调整水印大小 */ } /* 可选:部分渲染引擎不支持@page的opacity,添加半透明覆盖层降低水印亮度 */ body::after { content: ""; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.7); z-index: 1; pointer-events: none; } </style>
- 移除原来的
<div class="watermark_report">元素,因为@page背景已经自动处理每页的水印了。
方案二:使用固定定位的水印容器
如果@page方法在旧版Odoo(用wkhtmltopdf)中不生效,可以用固定定位让水印在每个页面都显示:
- 调整HTML结构,确保水印容器在报表最外层:
<div class="watermark_report"> <img t-att-src="'data:image/png;base64,'+ doc.company_id.report_header_logo"/> </div> <!-- 你的报表内容容器 --> <div class="report_content"> <!-- 原有报表内容 --> </div>
- 添加对应的CSS样式:
<style type="text/css"> .watermark_report { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); opacity: 0.2; /* 调整水印透明度 */ z-index: -1; /* 确保水印在内容下方 */ width: 350px; /* 调整水印大小 */ height: auto; } /* 确保报表内容不会被水印遮挡 */ .report_content { position: relative; z-index: 1; } </style>
额外注意点
- Odoo 16+默认用Weasyprint渲染PDF,两种方案都能完美生效;旧版本用wkhtmltopdf的话,需要在Odoo设置中启用
--enable-javascript参数,确保固定定位正常工作。 - 建议先测试水印的大小和透明度,调整到不影响内容阅读的视觉效果。
- 如果公司logo本身不透明,可以先在图片工具中降低透明度再上传,避免CSS透明度带来的兼容问题。
内容的提问来源于stack exchange,提问作者Ketan Chauhan
相关产品推荐
相关产品推荐

