Перед печатью настройте принтер, макет и нужный товар в проекте службы. Получите их ID через каталог API. Все ID в примерах условные.
| Задача | Запрос |
|---|---|
| Напечатать одинаковые копии | POST /api/v1/print/copies |
| Напечатать разные коды маркировки из базы | POST /api/v1/print/gs1 |
| Получить файл команд без отправки принтеру | POST /api/v1/print/file |
Обычные копии могут содержать одинаковый код маркировки. Для уникальных кодов используйте print/gs1. Все три команды возвращают 202; затем нужно дождаться конечного состояния задачи.
Выбрать формат
text передаёт текстовые и векторные команды языка принтера, graph формирует изображение всей этикетки. Поддерживаются профили TSC, GODEX и ARNI. Сначала проверьте макет в нужном формате: не все сочетания полей и штрихкодов поддерживаются.
Если принтер настроен спрашивать формат перед печатью, в copies и gs1 обязательно задайте printMode: API не может открыть окно выбора. При фиксированном формате принтера этот параметр можно пропустить. В file поле format обязательно всегда.
Все ID и count должны быть положительными. Принтер выбирается из проекта: произвольный сетевой адрес в запросе не принимается. Для MySQL генерация и печать через API недоступны.
Напечатать копии
POST /api/v1/print/copies:
| Поле | Значение |
|---|---|
labelId, printerId, count |
Обязательные ID макета, ID принтера и количество копий |
productId |
Необязательный ID товара для подстановок |
printMode |
text или graph. Если принтер настроен спрашивать формат, укажите его явно; иначе поле можно пропустить |
transport |
tcp по умолчанию или явное arni-operation |
Пример одной копии макета с условными ID:
{"labelId": 1, "printerId": 1, "productId": 10, "count": 1, "printMode": "text"}
При TCP программа проверяет состояние принтера, формирует данные и отправляет их на порт 9100. Передача всех байтов не подтверждает физическую печать. Если устройство не подтвердило выполнение, задача завершится ошибкой printer_command_unconfirmed и retrySafe=false.
Напечатать копии через HTTP ARNI
Этот режим выбирается только через transport="arni-operation". До запроса проверьте ограничения:
- В проекте выбран ARNI с числовым IP-адресом и подтверждённой привязкой.
- Формат —
graph; скорость и плотность в настройках принтера проекта равны0. - Количество копий — от 1 до 32 767; печать уникальных кодов маркировки в этом режиме не поддерживается.
Пример с условными ID:
{"labelId": 1, "printerId": 1, "productId": 10, "count": 1, "printMode": "graph", "transport": "arni-operation"}
API объединяет копии в одну операцию печати и проверяет, подтвердил ли принтер всё запрошенное количество. Если подтверждения нет или принтер подтвердил не все копии, перед повтором проверьте устройство и отпечатки. Автоматического перехода на TCP нет. Успех программного обмена не заменяет проверку отпечатка на вашем оборудовании.
Параметр transport относится только к copies. Для gs1 и file такого выбора нет.
Напечатать коды из базы
POST /api/v1/print/gs1 принимает обязательные labelId, printerId, productId, count и необязательные orderId, printMode.
Запрос выбирает индивидуальные коды: включённые, неиспользованные, непроверенные, без отметки об отправке и с действующим сроком. Коробочные коды не выбираются. При orderId подходят коды этого задания и коды без привязки. Общая статистика available считает более широкий набор и не гарантирует такое же количество для печати.
- Загрузите коды и проверьте доступное количество.
- Укажите товар, макет и принтер. Если нужна выборка для задания, передайте его внутренний
orderId. - Сначала запросите одну этикетку и проверьте результат задачи и отпечаток.
API резервирует доступные непросроченные коды, готовит отдельную этикетку для каждого и отправляет их по TCP. Для &измер1& выделяются значения дневного счётчика.
Коды отмечаются использованными только после подтверждённого выполнения. При ошибке до отправки резерв освобождается. Если результат отправки неизвестен, резерв остаётся, чтобы те же коды не попали в повторную печать. API не предоставляет команды ручного подтверждения печати или снятия такого резерва. Сначала проверьте устройство и напечатанные этикетки.
В результате задачи доступны printerId, format, productId, codeCount, bytes и bytesSent. Если в запросе был orderId, он тоже есть в результате. Счётчик отправленных байтов не равен числу подтверждённых отпечатков.
Создать файл команд
POST /api/v1/print/file принимает:
| Поле | Значение |
|---|---|
labelId, printerId, count |
Обязательные ID макета, ID принтера и число копий |
format |
Обязательное text или graph |
productId, orderId |
Необязательные ID для подстановок |
gs1CodeId |
Необязательный ID кода из текущей базы для маркеров «Честного знака» |
Пример с условными ID:
{"labelId": 1, "printerId": 1, "productId": 10, "count": 1, "format": "graph"}
Команда не отправляет данные принтеру. После Succeeded декодируйте result.contentBase64 и сохраните байты в файл. Поля fileName, contentType, bytes и format описывают файл. Сохраняйте именно декодированные байты, а не текст Base64.
gs1CodeId только подставляет код: он не резервируется и не отмечается использованным. При последующей печати файла учёт этого кода остаётся обязанностью внешней системы.
Настроить общую очередь на компьютере
В Windows и Linux для поддерживаемых операций копий и GS1 работает общая очередь. GUI, API и CLI ждут, пока другой процесс LabelRedo закончит работу с тем же сетевым принтером, и только затем начинают отправку.
Если задаёте LABELREDO4_PRINTER_OWNER_DIR, укажите один и тот же абсолютный путь во всех участвующих процессах. Каталог должен существовать. Пользователям GUI и учётной записи службы нужны права создавать, читать и изменять файлы координации в нём. Не используйте для этого каталог с токеном API и не удаляйте файлы блокировки во время работы.
Установщики создают стандартный общий каталог. При ошибке printer_owner_unavailable администратор должен проверить путь и права. Общие переменные и каталоги описаны в настройках программы.
Эта очередь не управляет программами на других компьютерах и внешним ПО. Команды управления ARNI, работа со шрифтами и другие операции, которые не используют общую блокировку, требуют отдельного согласования. В этой сборке общая очередь API/CLI подключена только в Windows и Linux.
Разобрать результат печати
| Код задачи | Действие |
|---|---|
printer_not_ready |
Проверьте состояние устройства, материал и ошибки |
printer_unavailable |
Проверьте адрес и сеть |
printer_command_rejected, printer_busy |
Прочитайте сообщение и состояние принтера |
printer_command_unconfirmed |
Проверьте отпечатки; не отправляйте серию снова автоматически |
printer_response_incomplete, printer_response_unknown |
Ответ не доказывает результат; проверьте принтер до повтора |
arni_unconfirmed или safeToRetry=false |
Проверьте HTTP-операцию и устройство; новый ключ идемпотентности не разрешает повтор |
В result могут быть протокол, этап, длительность, число отправленных байтов и диагностика ответа. Для обращения в поддержку сохраните jobId, errorCode и содержимое result. Принятая задача API, отправленные по TCP данные и запись в истории обработки заданий в принтере ARNI не подтверждают, что все копии напечатаны.