Files
label-extractor/README.md
gkonoplya 93b28b1ea2 Add initial project structure and core functionality for label extraction and PDF generation
- Created .gitignore to exclude unnecessary files and directories.
- Implemented build_pdf.py for generating PDF labels from Excel data, including barcode rendering.
- Added read_image.py for extracting DataMatrix codes from images using zxing-cpp.
- Introduced render_eps.py for converting EPS images to PNG format with Ghostscript.
- Updated README.md with project overview, features, installation instructions, and usage guidelines.
- Included requirements.txt for dependency management.
- Added resources for logos and sample Excel template.
- Compressed Ghostscript binaries into Ghostscript.zip for easy integration.
2026-02-21 11:46:24 +03:00

57 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 диска.