- Home
- Apps
- SaaS Tools
- Report QWeb Element Page Visibility
Illustrative previewA build-to-order Odoo module that lets you show or hide any QWeb report element based on where it falls in the
printed document — first page, last page, or a specific page in the run.
ECOSIRE scopes, builds, installs, and supports it for your Odoo 17/18/19 instance.
What is Report QWeb Element Page Visibility?
A build-to-order Odoo module that lets you show or hide any QWeb report element based on where it falls in the printed document — first page, last page, or a specific page in the run. ECOSIRE scopes, builds, installs, and supports it for your Odoo 17/18/19 instance. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Every business that prints invoices, delivery slips, quotations, or purchase orders from Odoo eventually hits the same wall: the standard QWeb report renders the same header, footer, terms block, and signature area on every single page of a multi-page document. You end up with the bank details and full terms and conditions repeated on page 3 of a long invoice, or a "continued overleaf" note you cannot place only where it belongs. Odoo's report layouts and the web.external_layout templates give you a global header and footer, but out of the box there is no per-page conditional — QWeb has no native awareness of which physical page an element is landing on, because pagination happens later in the wkhtmltopdf/report_pdf rendering step, not in the template loop. Teams work around this with brittle CSS page-break hacks that break the moment a line item count changes.
Report QWeb Element Page Visibility is the module we build to give you real, declarative control over where report elements appear. We add a small extension to the QWeb reporting stack so any element in your report templates can carry a visibility rule — show only on the first page, only on the last page, only on a specific page number, or on every page except the first or last. Technically this is delivered through a targeted report.layout/ir.actions.report extension plus a lightweight rendering pass that annotates the generated PDF pages, driven by data attributes you place on the QWeb nodes (for example a t-page-visibility="first|last|nth" convention). Because the logic keys off the actual paginated output rather than guessing in the template, it stays correct whether a document renders as one page or twenty. We wire it cleanly into your existing web.external_layout_standard/_boxed/_bold templates or your custom report views, so your bank-details block lands only on the last page, your signature line prints only where it should, and repeated legal text disappears from the interior pages.
Under the hood we keep everything on standard Odoo foundations: a proper __manifest__.py declaring the web and base dependencies and the QWeb template assets, any configuration surfaced through ir.model fields with ir.model.access.csv entries and record rules so only report designers can edit the rules, and views built in XML/OWL that fit the native Settings and Technical menus. No core files are patched — the behavior is layered through inheritance so your Odoo stays upgrade-safe. The module is built and tested against Odoo 17.0, 18.0, and 19.0, works on both Community and Enterprise (Enterprise's additional report layouts are supported where present), and exposes its configuration over the standard XML-RPC/JSON-RPC API so it can be provisioned or scripted alongside the rest of your deployment.
Because this is a build-to-order engagement, delivery starts with a short scoping call where we confirm which reports need per-page control, your exact page-placement rules, and your target Odoo version and edition. There is no instant download — we build the module to your requirements, test it on a staging copy of your database, run UAT with your team, and then install to production with a rollback plan. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); additional report templates, deep Enterprise layout customization, multi-company placement rules, or bespoke pagination logic beyond the standard first/last/nth cases increase the quoted scope. You receive a firm fixed quote after the scoping call — the from-price is a starting indication, not a final figure.
What you get
- Installable Odoo module source code, built for your target version (17.0, 18.0, or 19.0) and edition
- Installation and configuration on your environment, including wiring into your existing report layouts
- Technical documentation: module architecture, the `t-page-visibility` convention, and how rules are evaluated
- End-user guide plus a live training session for your report designers and admins
- UAT on a staging copy of your database with a documented rollback plan before production install
- Post-go-live support window for defect fixes and configuration questions
- Git repository handover with full commit history and tagged release
- Test report templates demonstrating first-page, last-page, and nth-page placement against your real documents
Who this is for
Odoo Report Designer / Functional Consultant
Owns the look of printed invoices and orders and is tired of CSS page-break hacks. Needs a declarative, maintainable way to place blocks per page that survives line-item count changes and Odoo upgrades.
Finance / Accounts Operations Lead
Wants bank details, payment terms, and totals to appear only on the last page of long invoices — and repeated legal text gone from interior pages — so customer-facing documents look professional and unambiguous.
Odoo Technical Administrator / Developer
Runs the instance and cares about upgrade safety. Wants the behavior layered through inheritance with proper `ir.model.access.csv`, record rules, and API-scriptable configuration, not a patched core.
Compliance / Legal Operations Manager
Needs terms, disclaimers, and signature lines to print in a specific, controlled position on the correct page for contractual and audit purposes, consistently across every document type.
How Report QWeb Element Page Visibility Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Per-page element visibility (first / last / nth) | Built to your exact rules across chosen reports | Possible but you design and maintain the logic yourself | Fixed feature set, may not cover nth-page or your layouts | No native per-page conditional in QWeb |
| Fit to your specific reports | Scoped to your documents on a discovery call | Fully tailored if you have the in-house dev time | Generic; you adapt your reports to it | Global header/footer only, same on every page |
| Upgrade safety (17/18/19) | Inheritance-based, no core patches, version-tested | Depends on your team's discipline | Varies by vendor; upgrade timing not in your control | Safe but lacks the capability entirely |
| Delivery model | Built, tested on staging, installed with rollback plan | You build, test, and deploy yourself | Instant download, you self-install and debug | Already present but insufficient |
| Time to working solution | one working week from confirmed scope | Weeks to months of internal dev effort | Minutes to install, then your own troubleshooting | Immediate but requires fragile CSS workarounds |
| Support and accountability | Post-go-live support window + Git handover | Rests entirely with your team | Ticket queue, best-effort, no context on your setup | Community forums only |
| Cost | From $999 indicative; fixed quote after scoping | High internal engineering cost and opportunity cost | Low sticker price, hidden integration cost | Free but does not solve the problem |
| Security and permissions | ir.model.access.csv + record rules for designer roles | You implement access control yourself | Depends on vendor implementation | N/A — no configurable feature |
Frequently Asked Questions about Report QWeb Element Page Visibility
Is this an existing app I can download and install right now?
No. This is a build-to-order module. ECOSIRE builds it to your specific report and page-placement requirements, tests it on a staging copy of your database, and installs it for you. There is no instant download.
How long does delivery take?
Typical delivery is one working week from confirmed scope. The timeline starts once we have agreed which reports need per-page control, your exact placement rules, and your target Odoo version and edition on the scoping call.
How does pricing and scoping work?
Pricing starts from $999 as an indicative, single-company base-scope figure. Drivers such as additional report templates, deep Enterprise layout work, multi-company rules, or bespoke pagination logic increase the quoted scope. After the scoping call you receive a firm fixed quote — the from-price is a starting indication, not the final figure.
Which Odoo versions and editions do you support?
We build and test against Odoo 17.0, 18.0, and 19.0, on both Community and Enterprise. Enterprise-specific report layouts are supported where present, with graceful fallback on Community.
What about support and future updates?
Every build includes a post-go-live support window for defect fixes and configuration questions, plus a Git repository handover so your team has the full source. Version upgrades or new report rules beyond the support window are quoted as a separate small engagement.
Will this break when I upgrade Odoo?
The module layers its behavior through inheritance of the standard report layouts rather than patching core files, which keeps your instance upgrade-safe. When you move to a new Odoo major version we verify and, if needed, adjust the module as part of a migration engagement.
Can it target our existing custom reports, not just standard ones?
Yes. It works with standard Odoo reports and with your own custom `ir.actions.report` definitions and QWeb templates. During scoping we confirm exactly which documents and which elements need per-page visibility rules.
Related Modules

Redsys & Bizum Payment Gateway for Odoo (Spain)
A build-to-order Odoo payment provider that connects your store and invoicing to the Redsys bank network for Spanish card payments and Bizum mobile transfers. ECOSIRE builds, installs, and supports it across Odoo 17, 18, and 19.

Referral 'Refer & Earn' Program
Build-to-order Odoo module: shareable referral codes with automatic wallet, coupon or points rewards for referrer and referee.

REST API & Webhooks Toolkit
Secure, documented REST API and outbound webhooks for any Odoo model — built, installed, and supported by ECOSIRE for Odoo 17/18/19.

Restrict POS Refund with Password
A made-to-order Odoo Point of Sale extension that forces a password or manager PIN before any refund, return, or negative-quantity line is authorized. ECOSIRE builds it to your workflow, installs it, and supports it.
Report QWeb Element Page Visibility
A build-to-order Odoo module that lets you show or hide any QWeb report element based on where it falls in the printed document — first page, last page, or a specific page in the run. ECOSIRE scopes, builds, installs, and supports it for your Odoo 17/18/19 instance.
- Per-element visibility rules on QWeb report nodes: show only on first page, only on last page, on a specific nth page, or on all-but-first / all-but-last
- Layered through inheritance of `web.external_layout_standard`, `_boxed`, and `_bold` templates — no Odoo core files patched, keeping the instance upgrade-safe
- Declarative `t-page-visibility` data-attribute convention applied directly in report XML, evaluated against the actual paginated PDF output rather than guessed in the template loop
- Correct on documents of any length — placement stays right whether an invoice renders as one page or twenty line-item pages