gkonoplya 3f8e6935a8 Refactor barcode extraction and enhance PDF processing capabilities
- Added extract_barcodes_from_pdf function to read barcodes from PDF files using fitz.
- Updated read_datamatrix_zxing to return both the barcode text and its Base64 representation.
- Modified main execution block to include PDF barcode extraction.
- Improved image loading for better compatibility with zxing.
- Updated requirements.txt to include pymupdf for PDF processing.
2026-02-21 12:42:17 +03:00

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:

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:
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 диска.
Description
No description provided
Readme 59 MiB
Languages
Python 88.6%
PowerShell 11.4%