BFBambooForge Labs

Product Label Designer & Barcode Printing

Design and print product labels and barcodes without XML: drag-and-drop designer, 31 ready stocks (Avery, Dymo, Zebra), QR codes, start-at-label.

Buy on the Odoo Apps StoreOpen the live demoWarehouse€232Community & Enterprise

Available for Odoo 16.0, Odoo 17.0, Odoo 18.0, Odoo 19.0. Technical name bambooforge_label_designer.

Odoo 16.0Odoo 17.0Odoo 18.0Odoo 19.0
Full walkthrough on a live Odoo 19.0 database, with subtitles. It ends with what this app deliberately does not do.

Product Label Designer & Barcode Printing

Design labels for any Odoo record — products, lots, pickings, assets, members — and print them on the stock you already buy. Blocks are placed in millimetres, barcodes are drawn by Odoo itself, and the print dialog can start half way down a sheet you already used.

This page is the whole manual: install, design, print, and fix the usual problems without contacting support.

What it is

Three records and nothing else to learn:

Label stock (Labels → Label Stocks)

The physical sheet or roll: page size, margins, how many labels across and down, the label size and the gaps between them. Thirty-one common stocks ship with the app — Avery A4 and US Letter, Dymo, Zebra and thermal rolls — and you can measure your own in a minute.

Label template (Labels → Label Templates)

A design for one model on one stock. You place blocks — a field, free text, a price, a barcode, an image, a box, a rule — each with its own position and size in millimetres. Publishing turns it into a normal Odoo PDF report.

Print dialog

How many copies, and which label on the sheet to start at.

Install

  1. Copy bambooforge_label_designer into your addons path (or install the ZIP), update the app list and install BambooForge Label Designer.

  2. Give yourself Label Designer: Designer (Settings → Users → Other → Label Designer). Everyone else can print; only designers can change a template.

  3. The Labels menu appears with Label Templates and Label Stocks.

The app depends only on base, web and product. It works on Community and Enterprise alike, and prints with the wkhtmltopdf your Odoo already uses — no print server, no font pack, no external service.

Design a label

Labels → Label Templates → New

  1. Model — what you print. product.template for shelf labels, stock.lot for lot labels, stock.picking for parcel labels, or your own model.

  2. Label stock — pick the sheet you buy. The canvas immediately takes the size of one label on it.

  3. Copies — how many labels one record gets by default.

  4. Copies from field (optional) — a field holding a quantity, e.g. qty_available. It multiplies the number of copies asked for, which is how "one label per unit in stock" becomes a setting instead of a script.

  5. Print cut guides — a dashed outline around each label. Leave it on while you align a new stock on plain paper; turn it off for the real run.

Then place the blocks on the canvas: drag to move, pull the bottom-right corner to resize, and use the panel on the right for the details. Everything snaps to half a millimetre.

Block

What it prints

Field

Any field of the record, including a dotted path such as categ_id.name. Optional prefix and suffix, size, alignment, bold.

Text

Fixed text: a warning, a unit, your own name.

Price

A numeric field printed as money, with the record's own currency.

Barcode

Code128, EAN13 or QR built from a field. The image is drawn inside the PDF — nothing is fetched over the network at print time. Tick Print the value under the bars for a human-readable line.

Image

Any binary field: the product photo, a logo, a signature.

Box / Line

A frame or a rule, in the template's accent colour.

Press Publish. That is the moment the design is checked: a block pointing at a field the model does not have, or an unsupported barcode symbology, refuses to publish and tells you which block is wrong. A published template becomes a real ir.actions.report, so it appears in the record's Print menu and can be called from a server action, a button or a cron.

Preview PDF prints the first records of the model straight away, which is the fastest way to check a design against the actual stock.

Print

From a list or a form of the model: Print → Print labels.

  • Copies — labels per record (multiplied by Copies from field when the template uses one).

  • Start at label — the first free label on the sheet. Put the part-finished sheet back in the tray, say you are starting at label 14, and the first thirteen positions are left blank.

The dialog shows how many labels and how many sheets the job will take before you commit any stock.

The Print menu entry created by publishing prints with the template's own defaults and no dialog — handy for a one-click label from a form.

Measuring your own stock

Labels → Label Stocks → New, then measure the sheet with a ruler:

  • Page — the paper itself (210 × 297 mm for A4, or the label size for a roll).

  • Top / left margin — from the paper edge to the first label.

  • Columns / rows, label width / height, and the gaps between labels.

The form shows how much of the page the layout uses; the record refuses to save if the labels cannot physically fit. Print one page with cut guides on plain paper, hold it against the real sheet, and adjust: printers differ by a millimetre or two, and it is always the printer, never the design.

A roll printer is a stock whose page is one label: page 50 × 30 mm, one column, one row, no margins. Ten of those ship with the app.

How it prints

Worth knowing when something looks off by a millimetre:

  • Each stock gets its own paper format, built once and reused. It carries the page size, the stock's margins, and shrink-to-fit turned off — the PDF engine otherwise scales the page by about a fifth, which moves every label off its die-cut.

  • The margins live in that paper format rather than in the page, so page two of a long run lands exactly like page one.

  • Labels are laid out as inline blocks of a fixed size, the layout every label sheet in the world uses, and no label is ever split across a page.

Troubleshooting

Everything is shifted by a few millimetres

Print one page with cut guides and compare against the sheet. If the whole grid is offset, adjust the stock's top/left margin; if the spacing is wrong, adjust the gaps. Some printers also apply their own scaling: check that the print dialog is at 100% and not "fit to page".

"'x' is not a field of model.y"

A block points at a field the model does not have — usually after changing the template's model. Open the block and pick the field again.

"Unsupported barcode symbology"

Only Code128, EAN13 and QR are supported. EAN13 needs exactly 13 digits (12 plus the check digit); Odoo prints nothing for an invalid value, so check the field's content first.

The barcode is blank

The field is empty on that record. Barcodes print only when there is something to encode.

The price is cut off

The block is too narrow for the amount at that font size. Widen the block or drop a point of size — the label crops rather than reflow, on purpose, so nothing ever pushes another block off the label.

Nothing appears in the Print menu

The template is still in draft, or Add to print menu is off. Publish it.

Two templates for the same model

Both appear in the Print menu, each under its own name. The print dialog lets you pick; a list with no template for its model shows nothing.

What changed in 1.1

  • ZPL II output. The print wizard's Download ZPL renders the same block design as ^XA jobs for Zebra-class thermal printers - text, fields, prices, Code128 (with native GS1 mode), EAN-13, QR, boxes and lines, one job per label with the right ^PQ quantity. Image blocks stay PDF-only, stated on the file itself.

  • Print runs above 5,000 labels are refused with a clear message instead of hanging the PDF engine.

  • Templates carry a chatter tracking design changes, and are isolated per company.

Support

support@bambooforge.dev — questions, bug reports and feature requests are answered by the developers who wrote the module.

Screens

Designer - bambooforge_label_designer
Designer
Label sheet - bambooforge_label_designer
Label sheet
Print dialog - bambooforge_label_designer
Print dialog
Stocks - bambooforge_label_designer
Stocks
Templates - bambooforge_label_designer
Templates