Skip to content

About

Автоматическая печать ячеек при работе в Turbo-PVZ OZON. Автоматизация/оптимизация операционного процесса приемки товаров для сотрудников ПВЗ-OZON.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🖨️ StickerPrint

Расширение для Chrome + локальный сервер печати, которые автоматически печатают номерки ячеек при размещении товаров в Ozon PVZ (Turbo-PVZ).

Попап расширения Настройки сервера


✨ Возможности

  • 🎯 Автопечать при размещении — номерок печатается в двух сценариях: когда товар кладётся в ячейку (Movement/put/v2) и когда товару присваивается полка (TransferByBarcodeArticle, например "Ozon Полка-88" → П88).
  • ⌨️ Ручная печать — ввести номер через всплывающее окно расширения.
  • 📚 Серийная печать диапазонов — например 100-105, П15-П20 (до 1000 ячеек за раз).
  • 🛑 Отмена с прогрессом — печать продолжается даже при закрытом popup, прогресс виден в реальном времени.
  • ⚙️ Веб-настройки — выбор принтера, размер этикетки, DPI, размер шрифта через браузер.
  • 🖥️ Иконка в трее — быстрый доступ к настройкам.
  • 🧠 Устойчивость к перезапускам — если Chrome выгрузит service worker, печать продолжится с места остановки.

🧭 Как это работает

  1. page-hook.js (работает в MAIN-мире страницы) перехватывает XHR-ответы Turbo-PVZ и извлекает номер ячейки или полки.
  2. content.js (изолированный мир) слушает сообщения от page-hook.js и передаёт их в service worker через chrome.runtime.sendMessage.
  3. background.js (service worker) ставит номер в очередь и отправляет POST /print на локальный сервер.
  4. Сервер печати (Flask :3000 + win32print) форматирует номер и отправляет его на термопринтер.

Цепочка: page-hook.js → content.js → background.js → сервер :3000 → принтер

Какие запросы перехватываются

Печать запускается в двух сценариях размещения:

  • /api2/address-storage/Movement/put/v2 — товар кладётся в ячейку. Из ответа берётся articlePositions[0].address.
  • .../MicroFFTransferApi/TransferByBarcodeArticle — товару присваивается полка. Из ответа берётся transferSuccess.cell и преобразуется: "Ozon Полка-88" → П88.

В обоих случаях номер отправляется на печать. Подробности — в комментариях к исходникам.


🛠️ Установка

Вариант 1 — готовый установщик (рекомендуется)

  1. Скачайте StickerPrint_Setup.exe со страницы Releases
  2. Запустите установщик (потребуются права администратора)
  3. После установки сервер запустится автоматически и будет стартовать при загрузке системы
  4. Установите расширение: chrome://extensions/ → «Режим разработчика» → «Загрузить распакованное» → выберите C:\StickerPrint\extension
  5. Обновите каждую открытую вкладку Turbo-PVZ (F5 или Ctrl+R) — см. предупреждение ниже
  6. Настройте принтер — см. раздел «Настройка принтера» ниже

Python и Visual C++ устанавливать не нужно — всё уже внутри установщика.

🚨 ВНИМАНИЕ! 🚨

После установки расширения обязательно обновите каждую открытую вкладку Turbo-PVZ (клавиша F5 или Ctrl+R).

❗ Без перезагрузки страницы перехват запросов не включится, и автопечать не будет работать.

Вариант 2 — из исходников

1. Требования

  • Windows 10/11 (сервер использует win32print)
  • Python 3.9+
  • Google Chrome (или Chromium-based браузер)
  • Термопринтер с установленным драйвером (Xprinter, Zebra, Godex и т.п.)

2. Настройка сервера печати

# Перейти в папку сервера
cd server

# Установить зависимости
pip install -r requirements.txt

# Запустить сервер
python server.py

Сервер запускается на значениях по умолчанию «из коробки». Файл config.json создаётся автоматически при первом сохранении настроек через веб-интерфейс — заранее готовить его не нужно.

После запуска:

3. Установка расширения

  1. Открой chrome://extensions/
  2. Включи «Режим разработчика» (справа сверху)
  3. Нажми «Загрузить распакованное расширение»
  4. Выбери папку extension/ из этого репозитория (⚠️ именно extension/, а не корень проекта)
  5. Готово! Иконка 🖨️ появится в панели браузера
  6. Обновите каждую открытую вкладку Turbo-PVZ (F5 или Ctrl+R)

🚨 ВНИМАНИЕ! 🚨

После установки расширения обязательно обновите каждую открытую вкладку Turbo-PVZ (клавиша F5 или Ctrl+R).

❗ Без перезагрузки страницы перехват запросов не включится, и автопечать не будет работать.


⚠️ Настройка принтера

Перед первым использованием обязательно настройте принтер — установщик не знает, какой принтер подключён к вашему компьютеру.

  1. Убедитесь, что драйвер принтера установлен в Windows (Панель управления → Устройства и принтеры)
  2. Откройте http://localhost:3000/settings
  3. В выпадающем списке «Принтер» выберите ваш принтер
  4. При необходимости укажите размер этикетки и DPI (обычно 203)
  5. Нажмите «Сохранить настройки»

Если в списке ничего не выбрано — сервер попробует использовать системный принтер по умолчанию.

💡 Настройки в драйвере Windows и в сервере печати не связаны. Сервер использует только значения из config.json / веб-интерфейса (ширина, высота, DPI, размер шрифта). Настройки драйвера (размер бумаги, ориентация, отступы) сервер игнорирует.

Если что-то печатается не так — сначала проверьте настройки на странице http://localhost:3000/settings, а не в драйвере.


🚀 Использование

Автопечать при размещении (основной режим)

Просто работай в Turbo-PVZ как обычно. Номерок распечатается автоматически:

  • когда товар кладётся в ячейку (Movement/put/v2);
  • когда товару присваивается полка (TransferByBarcodeArticle).

Ручная печать

  1. Нажми иконку расширения 🖨️
  2. Введи номер: 105, П15, A1 и т.д.
  3. Нажми Enter или кнопку «Напечатать»

Серийная печать

В поле ввода можно вводить диапазоны:

Ввод Что напечатается
105 105
100-105 100, 101, 102, 103, 104, 105
П15-П20 П15, П16, П17, П18, П19, П20
А50-60 А50, А51, …, А60
П1-П3, А5, 200 П1, П2, П3, А5, 200
П008-П012 П008, П009, П010, П011, П012 (ведущие нули)

Ограничение: до 1000 ячеек за один запуск.


⚙️ Настройки сервера (справочно)

Сервер работает на значениях по умолчанию «из коробки». Файл config.json создаётся автоматически при изменении настроек через веб-интерфейс. Вот что он хранит:

{
    "label_width_mm": 30,
    "label_height_mm": 20,
    "dpi": 203,
    "max_font_size": 100,
    "min_font_size": 4,
    "printer_name": ""
}
Параметр Описание
label_width_mm Ширина этикетки в мм
label_height_mm Высота этикетки в мм
dpi Разрешение принтера (203 — стандарт для термопринтеров)
max_font_size Максимальный размер шрифта
min_font_size Минимальный размер шрифта
printer_name Имя принтера. Пустая строка (или принтер, которого нет в системе) = используется системный принтер по умолчанию

Менять файл вручную не нужно — используй веб-интерфейс http://localhost:3000/settings.


📸 Скриншоты

Попап расширения Настройки сервера
Попап Настройки

🔒 Безопасность

  • Всё работает локально. Расширение обращается только к 127.0.0.1:3000.
  • Никакие данные не отправляются на сторонние серверы.
  • Разрешения расширения: storage (настройки), alarms (watchdog), доступ к turbo-pvz.ozon.ru и 127.0.0.1:3000.

🧩 Структура проекта

StickerPrint/
│
├── extension/                  # 🧩 Chrome-расширение (Manifest V3)
│   ├── manifest.json           # манифест: разрешения, точки входа, мир скриптов
│   ├── background.js           # service worker: очередь печати, watchdog
│   ├── content.js              # мост: слушает page-hook → шлёт в background
│   ├── page-hook.js            # перехват XHR в MAIN-мире (put/v2, полка)
│   ├── popup.html              # разметка попапа (UI расширения)
│   ├── popup.js                # логика UI: парсинг диапазонов, прогресс
│   └── icon.png                # иконка расширения (16/48/128)
│
├── server/                     # 🖨️ Локальный сервер печати (Python)
│   ├── server.py               # Flask :3000 + win32print + иконка в трее
│   ├── icon.ico                # иконка сервера (вшита в .exe)
│   └── requirements.txt        # зависимости Python (Flask, pywin32, pystray, Pillow)
│
├── docs/                       # 🖼️ картинки для README
│   ├── popup.png               # скриншот попапа расширения
│   └── settings.png            # скриншот страницы /settings
│
├── .gitignore                  # что не коммитить (config.json, venv, __pycache__, dist)
├── README.md                   # этот файл — описание проекта
└── LICENSE                     # лицензия MIT

💡 config.json создаётся автоматически при изменении настроек и не хранится в репозитории (он в .gitignore).


❓ FAQ

Печать не работает / сервер offline → Убедись, что StickerPrintServer.exe запущен (иконка в трее), и в настройках выбран принтер.

После установки ничего не печатается → Скорее всего, не настроен принтер. Откройте http://localhost:3000/settings, выберите принтер из списка и нажмите «Сохранить настройки». Убедитесь, что драйвер принтера установлен в Windows.

Установил расширение, но автопечать не работает → Скорее всего, не обновлены открытые вкладки. Расширение внедряет скрипт в момент загрузки страницы, поэтому каждая вкладка Turbo-PVZ, открытая до установки, не перехватывает запросы. Нажмите F5 (или Ctrl+R) на каждой такой вкладке — после обновления автопечать заработает.

Печать идёт не по тому размеру / обрезается / съезжает → Проверьте настройки на http://localhost:3000/settings: ширина, высота, DPI. Сервер не использует настройки драйвера Windows — только свои. Если вы меняли размер в драйвере, это ни на что не влияет. И наоборот: настройки сервера не меняют драйвер.

Номерки печатаются дважды → Проверь lastPrintedCell в консоли service worker. Возможно, страница отправляет дублирующие запросы.

Расширение не устанавливается → Проверь, что выбираешь папку extension/, а в ней на верхнем уровне лежит manifest.json.

Принтер не виден в настройках → Принтер должен быть установлен в системе (Панель управления → Устройства → Принтеры). Если в настройках ничего не выбрано, сервер использует системный принтер по умолчанию.

Где взять config.json? → Не нужно нигде брать. Сервер работает на дефолтных значениях «из коробки», а config.json создастся сам, как только ты сохранишь настройки через http://localhost:3000/settings.

Где скачать установщик? → На странице Releases — файл StickerPrint_Setup.exe.


📄 Лицензия

MIT — можно свободно использовать, форкать и модифицировать.


🙏 Благодарности

Проект создан для упрощения работы сотрудников ПВЗ Ozon. Не является официальным продуктом Ozon.

About

Автоматическая печать ячеек при работе в Turbo-PVZ OZON. Автоматизация/оптимизация операционного процесса приемки товаров для сотрудников ПВЗ-OZON.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages