grocy/docs/label-printing.md
Katharina Bogad 2471e78188
Grocycode, label printing (#1500)
* Grocycode: Productpicker, StockService

* Grocycode: Datamatrix generation

* Grocycode: Display in UI, make Images downloadable

* Grocycode: Do not show on product card

* Grocycode: Stockentry Label view

* Grocycode: Webhooks & Labelprinter Feature

* Grocycode: Manual Label printing

* Grocycode: Print Label from product form

* Quagga2: use zxing for DataMatrix recognition

* Grocycode: Default settings for label printing

* Prepare merge of master

* Grocycode: docs

* Docs: label printing webhook

* Review

- "grocy" is currently written lower-case everywhere, so let's do this also for "grocycode"
- Unified phrases / capitalization
- Minor UI adjustments (mainly context menu item ordering / ordering/spacing on product edit page)
- Documented API changes for Swagger UI (grocy.openapi.json)
- Reverted German localizations (those are managed via Transifex; would cause conflicts when manually edited - will import them later there)
- Reverted a somehow messed up localization string (productform/help text for `cumulate_min_stock_amount_of_sub_products`)
- Suppress deprecation warnings when generating Datamatrix PNG (otherwise the PNG is invalid, https://github.com/jucksearm/php-barcode/issues/3)
- Default `FEATURE_FLAG_LABELPRINTER` to disabled

Co-authored-by: Bernd Bestel <bernd@berrnd.de>
2021-06-12 17:21:12 +02:00

1.8 KiB

Label printing

To enable label printing, set FEATURE_FLAG_LABELPRINTER to truein your config.php. You also need to provide a webhook target that is responsible for printing.

Why webhook?

Label printers come in all shapes and forms, and your particular one is probably not the one used by the author of this feature. Also, grocy may does not have a direct connection to a local label printer (e.g. grocy is hosted in a cloud vps). Thus, a lightweight implementation is provided by grocy: whenever something should print, a POST request to a configured URL is made. The target then is responsible for label printing.

Reference implementation

The webhook was developed and tested against a Brother QL-600 label printer, using endless 62mm label paper. The webhook provider implementation was implemented into a fork of brother_ql_web.

Webhook request

Requests can be configured to be sent server-side (that is, from the machine hosting grocy through GuzzleHttp) or by an AJAX request directly from the browser. The latter is neccesary for situations where the grocy hosting machine cannot reach your label printer, however server-side requests are a bit faster and tend to be more stable.

Both methods fire this request upon printing:

POST /your/printing/api/endpoint HTTP/1.1

product=<productname>&grocycode=grocy:x:xxx&duedate=DD:%2021-06-09&...

If specified, the request body may also be JSON encoded, however the fields stay the same.

Additional POST parameters (like the font to use) may be supplied in config.php. Keep in mind that these config values will be distributed to all clients on all requests if the webhook is configured to run client-side.

The webhook receiver is required to layout and print the resulting label.