# LabelExtractor (Честный ЗНАК / CRPT) Утилита для автоматизированного извлечения кодов маркировки (DataMatrix) и массовой генерации готовых к печати PDF-этикеток (формат 58x40 мм) на основе данных из Excel-шаблона. Решение оптимизировано для работы с системой «Честный ЗНАК» и создания этикеток для термопринтеров. ## Ключевые возможности * **Распознавание DataMatrix:** Точное чтение кодов из изображений с помощью `zxing-cpp` с сохранением непечатаемых спецсимволов GS1 (включая FNC1 / ASCII 29) посредством кодирования в Base64. * **Интеграция с Excel:** Парсинг атрибутов товара (GTIN, EAN, Описание, Артикул, Цвет, Размер, Организация) из Excel-шаблонов с использованием `pandas`. Чтение строго по позициям колонок обеспечивает защиту от изменения заголовков. * **PDF Генерация:** Автоматическая сборка промышленных макетов этикеток (включая логотипы EAC, Честный ЗНАК, штрихкоды Code128 и DataMatrix) с помощью `reportlab`. * **Умное форматирование текста:** Автоматический перенос строк (Word Wrap), адаптивное уменьшение размера шрифта и умное усечение текста многоточием (при выходе за границы AABB). * **Портативность:** Использование встроенной версии Ghostscript (`gswin32c`) для рендеринга EPS и штрихкодов без необходимости сложной системной настройки. ## Требования и установка Проект написан на Python 3. Установите необходимые зависимости из `requirements.txt`: ```bash pip install -r requirements.txt ``` **Зависимости:** * `pillow` — работа с изображениями. * `zxing-cpp` — быстрое и надежное чтение штрихкодов. * `reportlab` — генерация векторных PDF-файлов. * `pandas` & `openpyxl` — чтение и обработка Excel-таблиц. * `treepoem` — генерация штрихкодов (Code128, DataMatrix). *Примечание: Убедитесь, что архив `Ghostscript.zip` распакован в папку `Ghostscript` в корне проекта для корректной работы `treepoem` и обработки EPS-файлов.* ## Структура проекта * `build_pdf.py` — Главный модуль и оркестратор бизнес-логики. Считывает базу данных Excel, группирует входные коды по GTIN, рендерит штрихкоды и генерирует готовые PDF-документы. * `read_image.py` — Утилита для извлечения байтов DataMatrix из картинок и перевода их в безопасный Base64 формат. * `render_eps.py` — Скрипт-конвертер EPS изображений в PNG с использованием портативного Ghostscript. * `Resources/` — Папка с графическими ассетами (логотипы) и исходным файлом `ШАблон для загрузки этикеток.xlsx`. * `data/` — Рабочая директория (содержит входные коды, картинки и генерируемые PDF в папке `output_pdfs`). ## Использование 1. Подготовьте описания ваших товаров в файле `Resources/ШАблон для загрузки этикеток.xlsx`. 2. Подготовьте список КМ (кодов маркировки), предварительно закодировав сырые байты DataMatrix в формат Base64. (Для получения Base64 из изображений можно использовать скрипт `read_image.py`). 3. Запустите процесс генерации PDF: ```bash python build_pdf.py ``` Готовые многостраничные PDF-файлы (сгруппированные по GTIN) будут сохранены в директории `data/output_pdfs/`. ## Архитектура решения Код разбит на несколько логических слоев: 1. **Domain Layer:** Описание структур данных (`LabelData`). 2. **Data & Asset Layer:** Функции генерации и трансформации изображений и штрихкодов (`render_code128`, `create_datamatrix_in_memory`). Изображения генерируются без сглаживания (`NEAREST`) для идеальной печати на термопринтерах. 3. **Presentation Layer:** Низкоуровневая отрисовка PDF-холста через `reportlab`, позиционирование блоков и алгоритмы подгонки текста (`draw_label_page`, `place_text`). 4. **Business Logic Layer:** Оркестрация батчевой обработки данных (`process_batch`). Чтение тяжелых файлов происходит один раз для экономии ресурсов I/O диска.