- 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.
57 lines
5.8 KiB
Markdown
57 lines
5.8 KiB
Markdown
# 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 диска.
|