| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Lines of code | 661 |
| Technical Name |
aos_web_export_pdf |
| License | OPL-1 |
| Website | https://www.alphasoft.co.id/ |
| Versions | 10.0 11.0 15.0 16.0 17.0 18.0 19.0 |
Export to PDF — Any List View, One Click
The cleanest list-view PDF export for Odoo.
Filters in the header, columns in order, totals at the bottom,
page numbers in the corner. Looks like a real report —
because it is one.
Sales, Inventory, Accounting, HR, custom modules — same one-click UX everywhere.
List views —
every model, no whitelist
Click —
no wizard, no dialog
Odoo versions —
same module, same UX
One-time —
perpetual license
Excel exports are great. For finance.
But your warehouse manager needs paper.
Your CEO wants to skim the daily sales summary on
his phone. Your auditor needs a frozen snapshot,
not a spreadsheet that someone might re-sort.
PDF is the universal "send / print / archive" format.
Odoo doesn't ship that for list views.
This module does.
Before vs. After
Before this module
- Export to XLSX.
- Open in Excel.
- Set the print area, fix column widths, hide ID column.
- Add page numbers and date in header/footer.
- Save as PDF.
- Hope it prints the same on someone else's machine.
~5 minutes every time someone asks for a printable report.
After this module
- Click the Action sidebar.
- Click Export to PDF.
~3 seconds. Same filters, same columns, same totals as on screen.
Key features
Print-ready PDF
Clean table with title row, filter
summary, zebra-striped data rows, footer totals. Renders via
wkhtmltopdf — identical across browsers,
operating systems, and devices.
Filter-aware
Whatever search facets are active (Date range, Customer, Status, custom filters) print as a comma-separated header line. The PDF reflects exactly the records you saw on screen — no surprise.
Smart value rendering
Selection fields show their label ("Validated") not their key ("validated"). Many2one shows the related record name. Booleans render as "Yes" / blank. Numbers right-aligned with 2 decimals.
Action sidebar integration
Lives next to the standard "Export" (XLSX) entry in the list view Actions dropdown. Familiar UX — no training, no documentation, no support tickets.
Auto landscape
When the list has more than 4 columns, the PDF auto-flips to landscape so nothing overflows. Margins, paper size, page numbers — all handled automatically.
Every list view
No model whitelist, no per-model config. Sales, Invoices, Pickings, HR, Helpdesk, Inventory, your custom modules — if it's a list view, it can be exported.
Visible columns only
Auto-detects the columns currently shown on screen — including optional columns the user has toggled on via the column picker. Hidden columns stay hidden. WYSIWYG.
Works on Odoo 15→19
Single license, version-matched releases for Odoo 15, 16, 17, 18, and 19. Upgrading? Get the matching version free. Source code included (OPL-1).
Permission-safe
Uses the same ORM access controls as the list view itself. If a user can't see a record, they can't export it. No backdoor data leakage.
How it works
Open any list view
Apply your usual filters, group-by, search facets.
Actions → Export to PDF
The new entry sits right under the standard "Export" item.
PDF downloads
Save / print / email. Done.
See it in action
New "Export to PDF" entry under the standard Export. PDF mirrors the visible columns + filters + totals.
Real-world use cases
Warehouse picking lists
Field staff don't have browsers in the aisle. Filter Pickings by status & date, export PDF, print, hand over. Replaces a custom 80-line QWeb template.
Saves ~$200 of developer time per custom layout request.
Daily sales digest
Sales manager opens Quotations, filters "Today", exports PDF, attaches to email. 15 seconds vs. building a custom report. CEO reads it on the train.
Replaces ad-hoc Excel attachments — consistent formatting every time.
Year-end snapshots
Auditor wants AR aging on 31-Dec. Filter, export, archive in the audit folder. Frozen snapshot — can't be accidentally re-sorted like an XLSX. Date in footer proves when it was captured.
Forms part of immutable audit trail.
HR roster prints
Employee list filtered by department, exported and posted on the noticeboard. Every department / branch / shift can DIY their own report.
Production attachments
Manufacturing Orders filtered by date & product, exported, attached to the physical work order folder. Eliminates "what were we supposed to make today?" calls.
Expense reports
Filter Expenses by employee + month, export PDF, attach to reimbursement claim. Auditable, signable, archivable. No custom Studio report needed.
"We were quoting customers a 2–3 day delay for every new printable list report. Studio + custom QWeb — Rp 500k each. With this module installed, customers do it themselves. We've stopped charging for list-PDF requests entirely."
— Odoo implementation partner, Jakarta
Under the hood
Two clean files. Standalone HTTP controller + ListController patch. No monkey-patches, no DOM scraping, no fragile assumptions.
Backend — controllers/web_export_pdf.py
class WebExportPdfController(http.Controller):
@http.route('/web/export/pdf_view',
type='http', auth='user')
def web_export_pdf_view(self, data, token=None):
payload = json.loads(data)
try:
pdf = self._render_pdf(payload)
except Exception as e:
# Full traceback in 500 response body
return self._render_500(e, payload)
return request.make_response(pdf, headers=[
('Content-Type', 'application/pdf'),
('Content-Disposition',
content_disposition(model + '.pdf')),
])
def _render_pdf(self, payload):
# Selection field -> label translation
# M2O -> display name
# Custom footer with page numbers
# Auto-landscape when > 4 columns
...
Frontend — Legacy ListController + Sidebar include
ListController.include, {
getStaticActionMenuItems() {
const items = super.getStaticActionMenuItems(
...arguments) || {};
items.exportPdf = {
sequence: 15, // right after "Export"
icon: "fa fa-file-pdf-o",
description: _t("Export to PDF"),
callback: () => this._aosExportToPdf(),
};
return items;
},
async _aosExportToPdf() {
const records = await this.orm.searchRead(
model, domain, visibleFields);
await download({ url: "/web/export/pdf_view",
data: {...} });
},
});
Frequently asked
Does it work with my custom modules?
Yes. There's no model whitelist. If your custom module has a list view, the Export to PDF entry appears.
Do I need wkhtmltopdf installed?
Yes — but it ships with every standard Odoo installation (it's how Odoo prints invoices). Nothing extra to install.
What about colored badges and widgets?
PDF doesn't support OWL widgets — that's a format constraint, not a module choice. We extract the underlying value: Selection labels, related-record names, formatted numbers. Clean and printable.
Will it slow down list views?
No. The module only loads ~140 lines of JS that register a single Action sidebar entry. Rendering only happens when the user clicks it. Zero impact on regular list-view operations.
Multi-company safe?
Yes. The PDF is rendered server-side using the same ORM permission checks as the list view itself. Users only see & export records they have access to.
Can I customize the footer?
The footer template is in
controllers/web_export_pdf.py —
a tiny HTML string with company name, page numbers, and
date. Edit it to add a logo, your tagline, whatever you
need. Source code is included.
What about records selected vs. all filtered?
Both work. If you tick checkboxes, only those records export. If nothing is ticked, the entire current filter domain exports. Same semantics as the built-in Export.
Single license — what does it cover?
Per-database license. Unlimited users on that database. Free updates within the same Odoo major version. Source code included (OPL-1).
Pricing — less than a coffee a week
Export to PDF
USD 55
Full source code · OPL-1 · Free updates within major Odoo version
- ✓ Action sidebar entry on every list view
- ✓ Filter-aware export (search facets in PDF header)
- ✓ Selection labels (not raw keys)
- ✓ Auto landscape when needed
- ✓ Compatible Odoo 15 → 19
- ✓ Permission-safe (uses Odoo ACLs)
- ✓ Source code (OPL-1)
- ✓ Email support (1 business day)
Compare: A single custom QWeb report by a developer costs ~$200-500. One install pays for itself in the first request.
Installation — 2 minutes
- Purchase & download the module from the Apps Store.
- Extract into your Odoo addons path.
- Open Apps → Update Apps List.
- Search Export View PDF → click Install.
- Open any list view → Action sidebar → Export to PDF.
Dependencies: base, web (both ship with Odoo).
Requires wkhtmltopdf (standard Odoo install dep).
Support & About
Need help?
We respond within 1 business day.
- Email: info@alphasoft.co.id
- Website: www.alphasoft.co.id
About Alphasoft
Alphasoft is an Indonesian Odoo development house focused on accounting, ISP/telco operations, and productivity add-ons. We've shipped this module across 5 Odoo major versions for Indonesian SMEs since 2017 — battle-tested in production.
License: OPL-1 | Author: Alphasoft | Odoo: 15.0 Community / Enterprise | Version: 15.0.1.9.0
Trademarks & logos: Odoo® is a trademark of Odoo S.A. Alphasoft is not affiliated with or endorsed by Odoo S.A.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module