Call +1 515-644-1400Call any time. 24/7 outage response is an add-on.hello@allodi.us

Blog

Print from a hosted Odoo to your office printers

Move Odoo to a data center and the printers stay behind your office router. Here is what Odoo does when you press Print, how to get documents and labels straight to a local printer, and what to check before you pick a way.

When Odoo runs on a server in your own office, it can usually reach the printers on the same network. When Odoo moves to a data center, as hosted Odoo does, that changes: the server is on the internet, the printers are behind your office router, and nothing on the internet can reach them. Pick slips, shipping labels and checks still have to come out of a printer in your building. This article explains what Odoo does by default, the ways to bridge that gap on Odoo 17, 18 and 19, and what to check before you choose one.

The short answer

Something has to run inside your building and fetch the print jobs from Odoo, because Odoo cannot reach in. On Community, the OCA's printing modules cover it, and on 19.0 they include a print client that runs on a computer next to the printer. The alternative is a small agent of your own that does the same job.

What Odoo does when you press Print

In Community, a report is a download. When you choose a report from the Print menu, the web client first offers it to any registered report handler, and if none takes it, the PDF is downloaded to your browser. Someone then opens it and prints it from the PDF reader, choosing the printer, the paper and the scale by hand. Community has no built-in way to send a report straight to a printer; that handler hook is what direct-printing modules plug into.

For an office printing a few invoices a day, the download is fine. For a warehouse printing a 4 by 6 inch label for every package, it is slow, and a label printed at the wrong scale is a label the carrier cannot scan.

Why a hosted server cannot reach your printers

Your office printers have private addresses on your local network. Your router lets computers inside connect out to the internet, and by default lets nothing on the internet connect in. A hosted Odoo server is outside. So any approach where the server opens a connection to a printer needs a hole in that wall, such as a VPN between the data center and the office or a forwarded port. The approaches that avoid this all run a small program inside the building that connects out to Odoo, just as a browser does, and picks up the jobs.

Ways to print to local printers

1. OCA printing modules (Community)

The OCA's report-print-send repository is the Community answer, with all its modules marked Beta. On 17.0 and 18.0, base_report_to_printer "allows users to send reports to a printer attached to the server" through CUPS, the standard print system on Linux, and its print-server record defaults to localhost on port 631. That works well when Odoo and the printers share a network. With a hosted server, Odoo has to connect to a CUPS server that can see the office printers, which brings back the VPN or tunnel.

On 19.0 the repository changed shape. The base module no longer includes a printing backend; CUPS moved to base_report_to_printer_cups, and two backends were added that print from inside the building:

  • base_report_to_printer_websocket sends PDFs over Odoo's own bus to a print client running on a computer that can reach the printer. Its README says no external print server is required.
  • Another module prints from the user's own computer through a separate desktop print helper, which needs a signing certificate set up in Odoo and in the helper.

For label printers, printer_zpl2, on 17.0 to 19.0, is a base for developers to design and send ZPL labels. It prints through CUPS: on 19.0 it depends on base_report_to_printer_cups, so a hosted Odoo still needs a route to the printer. Status as of October 9, 2026; check the branch for your version before you plan around it.

2. An agent you control

The other option is the same pattern, built and run by you or your Odoo provider: a small program on a computer at each site connects out to your Odoo over HTTPS, collects the jobs meant for its printers and prints them. Documents travel straight from your Odoo to your building. This is how we approach it at Allodi; more on that below.

What to check, whichever you choose

  • One job prints once. Networks drop and programs retry. A job should be claimed by one agent and marked done, so a retry never prints a second check or a second label.
  • Test copies never print. A copy of production restored for testing still holds the printer settings. Make sure a test database cannot reach a real printer, the same way it should not send real email. A database rollback does not unprint a page.
  • Labels print as labels. Zebra printers accept raw ZPL on TCP port 9100 by default, and Odoo's carrier connectors (part of Enterprise), UPS for example, can return labels as ZPL instead of PDF. Sending ZPL raw gives an exact label every time. A PDF label has to print at 100% scale on the right paper size.
  • Rules choose the printer. Labels to the Zebra at the packing bench, checks to the tray with check stock, everything else to the office printer. Choosing a printer by hand for each document is where mistakes come from.
  • Automatic printing is a switch, not a default. Together with one of the options above, Odoo's Automation Rules, which are in Community, can print a pick slip when a delivery is confirmed or a label when a shipment is validated. Turn on the ones you want, one at a time.
  • Failures are visible. An agent that is offline should show up in Odoo before someone walks to an empty printer tray.
  • There is a fallback. If the agent is down, people still need to print. Keep the standard PDF download available.

Our approach

Allodi Print is our version of the second option, for Odoo 19. An agent at each of your sites, on Windows, macOS or 64-bit ARM Linux, connects out to your Odoo, with no VPN and no router ports opened, and documents go directly from your Odoo to your printers without passing through Allodi or a print cloud. Rules pick the printer, ZPL labels go to label printers raw, and Odoo's Automation Rules can start the printing. It is included in Managed Odoo at no extra charge, and if the subscription ends, if renewals fail for 7 days, or while the account is paused, printing goes back to Odoo's standard PDF download with nothing else changed.

Whichever option you choose, test it on a copy of your database with printing pointed at a test printer, and run your busiest day's labels through it before you rely on it.

Questions people ask

Can Odoo Community print directly to a printer?

Not out of the box. Community downloads reports as PDFs. The OCA's report-print-send modules add direct printing, through CUPS on 17.0 and 18.0, and on 19.0 also through an agent on a computer that can reach the printer or through a desktop print helper on the user's computer.

Can a cloud-hosted Odoo print to printers in my office?

Yes, through a program inside your building that connects out to Odoo and prints the jobs it receives, such as the OCA's 19.0 print client or an agent you control. Approaches where the server connects to the printer need a VPN or an opened port.

How do I print Zebra labels from Odoo?

Odoo's carrier connectors (part of Enterprise), UPS for example, can return labels in ZPL, and Odoo's documentation says its ZPL labels are designed for 4 by 6 inch labels. Send the ZPL raw to the printer, which listens on TCP port 9100 by default, through an agent at your site. The OCA's ZPL module sends it through CUPS, which needs a route from the server to the printer.

Sources

  1. Odoo source: web client action service (18.0)
  2. OCA report-print-send: base_report_to_printer, 18.0
  3. OCA report-print-send: base_report_to_printer, 19.0
  4. OCA report-print-send: base_report_to_printer_websocket, 19.0
  5. OCA report-print-send: printer_zpl2, 18.0
  6. Zebra: internal_wired.ip.port (default 9100)
  7. Odoo documentation: Print Zebra labels (Odoo 18)
  8. Odoo documentation: UPS shipping, label format (Odoo 18)
  9. Odoo source: Automation Rules (18.0)