OdooWiki OCA HUB
Printer License: AGPL-3

This module extends the Report to printer (base_report_to_printer) module to add a ZPL II label printing feature.

This module is meant to be used as a base for module development, and does not provide a GUI on its own. See below for more details.

auto_awesome What this module does

AI-generated from the code · Odoo 19.0

Lets you design ZPL II labels (text, barcodes, shapes, images) for any Odoo model and print them on Zebra printers, with a preview via the Labelary service and an import tool for existing ZPL code.

This module adds a label designer for Zebra (ZPL II) printers. It is a technical base module: it adds a "ZPL II Labels" menu under the printer menu, where you create labels linked to an Odoo model (for example products or stock lots).

On each label you set the label width and origin point, and you add components: text, rectangles/lines, diagonal lines, circles, images, many barcode types (Code 11, Interleaved 2 of 5, Code 39, Code 49, PDF417, EAN-8, UPC-E, Code 128, EAN-13, QR Code), raw ZPL2 code, or another label used as a sublabel. Each component has its own position, size, font, orientation, colour and barcode options. Data can be typed manually, computed with a Python expression using the record's fields, or auto-filled. Components can be repeated with an offset, and a check prevents recursive labels.

A "Print Label" wizard is available on records of the chosen model: you pick a printer and a label and print one label per selected record. Labels can also be tested directly from the label form, either on a real printer or as an image generated by the Labelary online service. A separate wizard imports existing ZPL2 code into a label, optionally deleting current components.

Menus it adds

menu_printing_label_zpl2
Models and fields (5)
  • wizard.import.zpl2 · new modeldata, label_id (Label), delete_component (Delete existing components)
  • printing.label.zpl2 · new modelname, extra, width, active, model_id (Model), origin_x, origin_y, record_id (Record ID), printer_id (Printer), description, component_ids (Label Components), labelary_dpmm (Print density), labelary_image (Image from Labelary), labelary_width (Width in mm), labelary_height (Height in mm), test_print_mode (Mode Print), action_window_id (Action), test_labelary_mode (Mode Labelary), restore_saved_config (Restore printer's configuration)
  • wizard.print.record.label · new modelmodel (Model Name), label_id (Label), line_ids, printer_id (Printer), active_model_id (Model)
  • printing.label.zpl2.component · new modeldata, font, name, color, model, width, height, repeat (Repeatable), in_block, label_id (Label), model_id (Record's model), origin_x, origin_y, rounding, sequence, truncate, thickness, mask_value, rows_count, block_lines, block_width, orientation, sublabel_id (Sublabel), block_spaces, check_digits, module_width, repeat_count, block_justify (Justify), columns_count, data_autofill (Autofill Data)
  • wizard.print.record.label.line · new modellabel_no (# labels), label_header_id

Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 8 confirmed, 1 with no information of 9 versions.

Sources · Odoo 19.0

Confirmed on 2026-11-03 in branch 19.0 of OCA/report-print-send.

terminal Installation and usage

OCA documentation · Odoo 19.0

Nothing special, just install the module.

To configure this module, you need to:

  • Go to Settings \> Printing \> Labels \> ZPL II
  • Create new labels
  • Import ZPL2 code
  • Use the Test Mode tab during the creation

It's also possible to add a label printing wizard on any model by creating a new ir.actions.act_window record. For example, to add the printing wizard on the product.product model :

To print a label, you need to call use the label printing method from anywhere (other modules, server actions, etc.).

Example : Print the label of a product :

self.env['printing.label.zpl2'].browse(label_id).print_label( self.env['printing.printer'].browse(printer_id), self.env['product.product'].browse(product_id))

You can also use the generic label printing wizard, if added on some models.

[](https://runbot.odoo-community.org/runbot/144/12.0)

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.